Umfeld :
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
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
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
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)