Webdriverio: Não é possível usar browser.switchToFrame () no MS Edge

Criado em 24 abr. 2019  ·  3Comentários  ·  Fonte: webdriverio/webdriverio

Ambiente :

  • Versão do WebdriverIO: ["webdriverio": "^ 5.7.15"]
  • Modo: [WDIO Testrunner / BROWSERSTACK]
  • Se WDIO Testrunner, executando sync / async: [sync]
  • Versão Node.js: [v8.11.3]
  • Versão NPM: [5.6.0]
  • Nome e versão do navegador: [MS Edge v16, v17, v18]
  • Nome e versão da plataforma: [macOS Mojave 10.14.4]
  • Pacotes wdio adicionais usados ​​(se aplicável): projeto de amostra com o mesmo problema hospedado no 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"
  }

Configuração do 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
    }
}

Descreva o bug
O comando browser.switchToFrame () não muda para iFrames nas versões 16,17 e 18 do Microsoft Edge. O mesmo comando e trecho de código (consulte a seção Para reproduzir) funciona no Chrome, FireFox, Safari e IE11.

Reproduzir

npm run test:local Certifique-se de que o driver do seu navegador esteja inicializado
npm run test:remote Certifique-se de ter inserido seu BrowserStack user e key em wdio.remote.conf.js

Depois que o teste simples é executado, há um erro iniciado em browser.switchToFrame(parentFrame) com a seguinte mensagem ERROR webdriver: Request failed due to no such frame: The specified frame was not found in the current frame or window.

  • Opções 2

Em Ms Edge -Preferivelmente BrowserStack, mas isso não deve fazer nenhuma diferença- execute o comando browser.switchToFrame(element) ou browser.switchToFrame(element.elementId) e você terá o mesmo erro descrito na opção1

Comportamento esperado
O comportamento esperado é a capacidade de alternar para o iFrame e recuperar e localizar elementos dentro dele no MS Edge.

Registro

Console registra e registros wdio são compartilhados aqui essência

Contexto adicional
Inicialmente essa pergunta foi feita no canal Gitter, e discutida com @ christian-bromann hoje, e ele recomendou criar um fascículo aqui com mais detalhes.
Observe que também verifiquei este problema 3774, mas parece que não está relacionado, pois o código que compartilhei no GitHub (consulte a seção acima) funciona perfeitamente em todos os navegadores, exceto Edge

Comentários muito úteis

Eu encontrei uma solução alternativa para esse problema com base em:

Isso funcionaria no Chrome, FireFox, Ms Edge, IE11 e Safari, tudo em BrowserStack

let iFrame = $('//*[@name="iFrameSelector"]');
if (browser.capabilities.browserName === "MicrosoftEdge") iFrame = "iFrameSelector";
browser.switchToFrame(iFrame)

Todos 3 comentários

Eu encontrei uma solução alternativa para esse problema com base em:

Isso funcionaria no Chrome, FireFox, Ms Edge, IE11 e Safari, tudo em BrowserStack

let iFrame = $('//*[@name="iFrameSelector"]');
if (browser.capabilities.browserName === "MicrosoftEdge") iFrame = "iFrameSelector";
browser.switchToFrame(iFrame)

@ christian-bromann Estou feliz por encerrar o problema, pois há uma solução alternativa que está funcionando e foi testada.
Obrigado

Não consigo fazer com que essa solução funcione para ele. Tentei usar o nome da classe diretamente em switchToFrame e ainda vejo o mesmo problema The specified frame was not found in the current frame or window. . Só para entender sua solução alternativa corretamente, devo fornecer o nome da classe ou id diretamente em browser.switchToFrame(id or classname) . Isso é correto?

Atualização: esta solução funciona para cromo, ou seja, e borda. Não funciona para safari

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

briancullinan picture briancullinan  ·  4Comentários

imranazad picture imranazad  ·  3Comentários

Pylipala picture Pylipala  ·  4Comentários

christian-bromann picture christian-bromann  ·  3Comentários

KOPTE3 picture KOPTE3  ·  3Comentários