Webdriverio: browser.switchToFrame() kann auf MS Edge nicht verwendet werden

Erstellt am 24. Apr. 2019  ·  3Kommentare  ·  Quelle: webdriverio/webdriverio

Umfeld :

  • WebdriverIO-Version: ["webdriverrio": "^5.7.15"]
  • Modus: [WDIO Testrunner/BROWSERSTACK]
  • Wenn WDIO Testrunner, sync/async ausführen: [sync]
  • Node.js-Version: [v8.11.3]
  • NPM-Version: [5.6.0]
  • Browsername und -version : [MS Edge v16, v17, v18]
  • Plattformname und -version
  • Zusätzliche verwendete wdio-Pakete (falls zutreffend): Beispielprojekt mit dem gleichen Problem wird auf GitHub gehostet

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

Konfiguration von 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
    }
}

Beschreibe den Fehler
Der Befehl browser.switchToFrame() wechselt auf den Microsoft Edge-Versionen 16,17 und 18 nicht zu iFrames. Derselbe Befehl und Codeausschnitt (siehe Abschnitt zum Reproduzieren) funktioniert auf Chrome, FireFox, Safari und IE11.

Fortpflanzen

npm run test:local Bitte stellen Sie sicher, dass Ihr Browsertreiber gestartet ist
npm run test:remote Bitte stellen Sie sicher, dass Sie Ihren BrowserStack user und key in wdio.remote.conf.js eingefügt haben

Sobald der einfache Test ausgeführt wurde, wird bei browser.switchToFrame(parentFrame) ein Fehler mit der folgenden Meldung ERROR webdriver: Request failed due to no such frame: The specified frame was not found in the current frame or window. gestartet

  • Optionen 2

Führen Sie auf Ms Edge -vorzugsweise BrowserStack, aber das sollte keinen Unterschied machen - den Befehl browser.switchToFrame(element) oder browser.switchToFrame(element.elementId) und Sie haben den gleichen Fehler wie in Option1 beschrieben

Erwartetes Verhalten
Das erwartete Verhalten ist die Möglichkeit, in iFrame zu wechseln und darin enthaltene Elemente auf MS Edge abzurufen und zu lokalisieren.

Protokoll

Konsolenprotokolle und wdio-Protokolle werden hier geteilt

Zusätzlicher Kontext
Ursprünglich wurde diese Frage im Gitter-Kanal gestellt und heute mit @christian-bromann besprochen, und er empfahl, hier ein Problem mit mehr Details zu erstellen.
Bitte beachten Sie, dass ich auch dieses Problem 3774 überprüft habe

Hilfreichster Kommentar

Ich habe eine Problemumgehung für dieses Problem gefunden, die auf beiden basiert:

Dies würde auf Chrome, FireFox, Ms Edge, IE11 und Safari unter BrowserStack funktionieren

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

Alle 3 Kommentare

Ich habe eine Problemumgehung für dieses Problem gefunden, die auf beiden basiert:

Dies würde auf Chrome, FireFox, Ms Edge, IE11 und Safari unter BrowserStack funktionieren

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

@christian-bromann Ich schließe das Problem gerne, da es einen funktionierenden und getesteten Workaround gibt.
Dankeschön

Ich kann diese Lösung für ihn nicht zum Laufen bringen. Ich habe versucht, den Klassennamen direkt auf switchToFrame zu verwenden und sehe immer noch das gleiche Problem The specified frame was not found in the current frame or window. . Um Ihre Workaround-Lösung richtig zu verstehen, sollte ich den Klassennamen oder die ID direkt in browser.switchToFrame(id or classname) angeben. Ist das korrekt?

Update: Diese Lösung funktioniert für Chrome, dh und Edge. Funktioniert nicht für Safari

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen