Webdriverio: Impossible d'utiliser browser.switchToFrame() sur MS Edge

Créé le 24 avr. 2019  ·  3Commentaires  ·  Source: webdriverio/webdriverio

Environnement :

  • Version WebdriverIO : ["webdriverio": "^5.7.15"]
  • Mode : [WDIO Testrunner/Browserstack]
  • Si WDIO Testrunner, exécutant sync/async : [sync]
  • Version de Node.js : [v8.11.3]
  • Version NPM : [5.6.0]
  • Nom et version du navigateur : [MS Edge v16, v17, v18]
  • Nom et version de la plate-forme : [macOS Mojave 10.14.4]
  • Packages wdio supplémentaires utilisés (le cas échéant) : un exemple de projet avec le même problème est hébergé sur 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"
  }

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.

  • Option 2

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

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)

Tous les 3 commentaires

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

Cette page vous a été utile?
0 / 5 - 0 notes