Webdriverio: No se puede usar browser.switchToFrame () en MS Edge

Creado en 24 abr. 2019  ·  3Comentarios  ·  Fuente: webdriverio/webdriverio

Medio ambiente :

  • Versión de WebdriverIO: ["webdriverio": "^ 5.7.15"]
  • Modo: [WDIO Testrunner / BROWSERSTACK]
  • Si es WDIO Testrunner, ejecutando sync / async: [sync]
  • Versión de Node.js: [v8.11.3]
  • Versión de NPM: [5.6.0]
  • Nombre y versión del navegador: [MS Edge v16, v17, v18]
  • Nombre y versión de la plataforma: [macOS Mojave 10.14.4]
  • Paquetes wdio adicionales utilizados (si corresponde): el proyecto de muestra con el mismo problema está alojado en GitHub

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.

  • Opciones 2

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.

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)

Todos 3 comentarios

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

¿Fue útil esta página
0 / 5 - 0 calificaciones