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"
}
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.
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
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
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)