Medio ambiente :
package.json
"dependencies": {
"browserstack-local": "^1.3.7",
"config": "^1.28.1",
"uuid": "^3.1.0",
"webdriverio": "^5.7.15"
},
"devDependencies": {
"config": "^1.28.1",
"@wdio/cli": "^5.7.15",
"@wdio/local-runner": "^5.7.15",
"@wdio/mocha-framework": "^5.7.14",
"@wdio/sync": "^5.7.13"
}
Configuración de WebdriverIO
exports.config = {
user: process.env.BROWSERSTACK_USERNAME || 'XXX',
key: process.env.BROWSERSTACK_ACCESS_KEY || 'YYY',
specs: [
'./test/specs/**/*.js'
],
// Patterns to exclude.
exclude: [
// 'path/to/excluded/files'
],
maxInstances: 10,
capabilities: [
// Chrome and all other browsers work fine
// {
// browser: 'Chrome',
// resolution: '1280x1024',
// os: 'Windows',
// os_version: '10',
// name: 'Chrome',
// project: 'TT UI',
// 'browserstack.networkLogs': true
// },
{
browserName: 'Edge',
browser_version: '18.0',
resolution: '2048x1536',
os: 'Windows',
os_version: '10',
name: 'Microsoft EDGE',
project: 'TT UI',
'browserstack.networkLogs': true
}
],
// Level of logging verbosity: trace | debug | info | warn | error | silent
logLevel: 'debug',
waitforTimeout: 10000,
connectionRetryTimeout: 90000,
connectionRetryCount: 3,
framework: 'mocha',
mochaOpts: {
ui: 'bdd',
timeout: 60000
}
}
Describe el error
El comando browser.switchToFrame () no cambia a iFrames en las versiones 16, 17 y 18 de Microsoft Edge. El mismo comando y fragmento de código (consulte la sección Para reproducir) funciona en Chrome, FireFox, Safari e IE11.
Reproducir
npm run test:local
Asegúrese de que el controlador de su navegador esté iniciado
npm run test:remote
Asegúrese de haber insertado su BrowserStack user
y key
en wdio.remote.conf.js
Una vez que se ejecuta la prueba simple, se lanza un error en browser.switchToFrame(parentFrame)
con el siguiente mensaje ERROR webdriver: Request failed due to no such frame: The specified frame was not found in the current frame or window.
En Ms Edge, preferiblemente BrowserStack, pero eso no debería hacer ninguna diferencia, ejecute el comando browser.switchToFrame(element)
o browser.switchToFrame(element.elementId)
y tendrá el mismo error descrito en la opción 1
Comportamiento esperado
El comportamiento esperado es la capacidad de cambiar a iFrame y poder recuperar y ubicar elementos dentro de él en MS Edge.
Tronco
Consola de troncos y troncos WDIO son compartidos aquí lo esencial
Contexto adicional
Inicialmente, esta pregunta se hizo en el canal de Gitter y se discutió con @ christian-bromann hoy, y recomendó crear un problema aquí con más detalles.
Tenga en cuenta que también he comprobado este problema 3774, pero parece que no está relacionado, ya que el código que he compartido en GitHub (consulte la sección anterior) funciona perfectamente en todos los navegadores excepto Edge.
He encontrado una solución para este problema basada en ambos:
Esto funcionaría en Chrome, FireFox, Ms Edge, IE11 y Safari, todo bajo BrowserStack
let iFrame = $('//*[@name="iFrameSelector"]');
if (browser.capabilities.browserName === "MicrosoftEdge") iFrame = "iFrameSelector";
browser.switchToFrame(iFrame)
@ christian-bromann Estoy feliz de cerrar el problema ya que hay una solución probada y funcional.
Gracias
No puedo hacer que esta solución funcione para él. Intenté usar el nombre de la clase directamente en switchToFrame y sigo viendo el mismo problema The specified frame was not found in the current frame or window.
. Solo para entender su solución alternativa correctamente, ¿debo dar el nombre de clase o id directamente en browser.switchToFrame(id or classname)
. ¿Es eso correcto?
Actualización: esta solución funciona para chrome, ie y edge. No funciona para safari
Comentario más útil
He encontrado una solución para este problema basada en ambos:
Esto funcionaría en Chrome, FireFox, Ms Edge, IE11 y Safari, todo bajo BrowserStack
let iFrame = $('//*[@name="iFrameSelector"]');
if (browser.capabilities.browserName === "MicrosoftEdge") iFrame = "iFrameSelector";
browser.switchToFrame(iFrame)