Environnement :
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"
}
Configuration 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
}
}
Décrivez le bogue
La commande browser.switchToFrame() ne bascule pas vers les iFrames sur les versions 16,17 et 18 de Microsoft Edge. Le même extrait de commande et de code (voir la section Pour reproduire) fonctionne sur Chrome, FireFox, Safari et IE11.
Reproduire
npm run test:local
Veuillez vous assurer que le pilote de votre navigateur est démarré
npm run test:remote
Veuillez vous assurer que vous avez inséré votre BrowserStack user
et key
dans wdio.remote.conf.js
Une fois le test simple exécuté, il y a une erreur lancée à browser.switchToFrame(parentFrame)
avec le message suivant ERROR webdriver: Request failed due to no such frame: The specified frame was not found in the current frame or window.
Sur Ms Edge -De préférence BrowserStack, mais cela ne devrait faire aucune différence- exécutez la commande browser.switchToFrame(element)
ou browser.switchToFrame(element.elementId)
et vous avez la même erreur décrite sur option1
Comportement prévisible
Le comportement attendu est la possibilité de basculer dans iFrame et de pouvoir récupérer et localiser des éléments à l'intérieur sur MS Edge.
Enregistrer
Console journaux et les journaux sont partagés WDIO ici essentiel
Contexte supplémentaire
Initialement, cette question a été posée dans le canal Gitter et discutée avec @christian-bromann aujourd'hui, et il a recommandé de créer un problème ici avec plus de détails.
Veuillez noter que j'ai également vérifié ce problème 3774 mais il semble qu'il ne soit pas lié car le code que j'ai partagé sur GitHub (voir la section ci-dessus) fonctionne parfaitement sur tous les navigateurs sauf Edge
J'ai trouvé une solution de contournement pour ce problème basée sur les deux :
Cela fonctionnerait sur Chrome, FireFox, Ms Edge, IE11 et Safari, tous sous BrowserStack
let iFrame = $('//*[@name="iFrameSelector"]');
if (browser.capabilities.browserName === "MicrosoftEdge") iFrame = "iFrameSelector";
browser.switchToFrame(iFrame)
@christian-bromann Je suis heureux de clore le problème car il existe une solution de contournement fonctionnelle et testée.
Merci
Je n'arrive pas à faire fonctionner cette solution pour lui. J'ai essayé d'utiliser le nom de la classe directement sur switchToFrame et je vois toujours le même problème The specified frame was not found in the current frame or window.
. Juste pour bien comprendre votre solution de contournement, dois-je donner le nom de classe ou l'identifiant directement dans browser.switchToFrame(id or classname)
. Est-ce exact?
Mise à jour : cette solution fonctionne pour chrome, c'est-à-dire et edge. Ne fonctionne pas pour le safari
Commentaire le plus utile
J'ai trouvé une solution de contournement pour ce problème basée sur les deux :
Cela fonctionnerait sur Chrome, FireFox, Ms Edge, IE11 et Safari, tous sous BrowserStack
let iFrame = $('//*[@name="iFrameSelector"]');
if (browser.capabilities.browserName === "MicrosoftEdge") iFrame = "iFrameSelector";
browser.switchToFrame(iFrame)