Lingkungan :
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"
}
Konfigurasi 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
}
}
Jelaskan bugnya
Perintah browser.switchToFrame() tidak beralih ke iFrames di Microsoft Edge versi 16,17 dan 18. Perintah dan cuplikan kode yang sama (lihat bagian Untuk mereproduksi) berfungsi di Chrome, FireFox, Safari, dan IE11.
Untuk Mereproduksi
npm run test:local
Pastikan driver browser Anda dimulai
npm run test:remote
Pastikan Anda telah memasukkan BrowserStack user
dan key
di wdio.remote.conf.js
Setelah tes sederhana dijalankan, ada kesalahan yang diluncurkan pada browser.switchToFrame(parentFrame)
dengan pesan berikut ERROR webdriver: Request failed due to no such frame: The specified frame was not found in the current frame or window.
Di Ms Edge -Sebaiknya BrowserStack, tetapi itu tidak akan membuat perbedaan- jalankan perintah browser.switchToFrame(element)
atau browser.switchToFrame(element.elementId)
dan Anda memiliki kesalahan yang sama seperti yang dijelaskan pada opsi1
Perilaku yang diharapkan
Perilaku yang diharapkan adalah kemampuan untuk beralih ke iFrame dan dapat mengambil dan menemukan elemen di dalamnya di MS Edge.
Catatan
Log konsol dan log wdio dibagikan di sini intinya
Konteks tambahan
Awalnya pertanyaan ini ditanyakan di saluran Gitter, dan didiskusikan dengan @christian-bromann hari ini, dan dia menyarankan untuk membuat masalah di sini dengan lebih detail.
Harap dicatat saya juga telah memeriksa masalah ini
Saya telah menemukan solusi untuk masalah ini berdasarkan keduanya:
Ini akan berfungsi di Chrome, FireFox, Ms Edge, IE11 dan Safari semua di bawah BrowserStack
let iFrame = $('//*[@name="iFrameSelector"]');
if (browser.capabilities.browserName === "MicrosoftEdge") iFrame = "iFrameSelector";
browser.switchToFrame(iFrame)
@christian-bromann Saya senang untuk menutup masalah ini karena ada solusi yang berfungsi dan teruji.
Terima kasih
Saya tidak bisa membuat solusi ini bekerja untuknya. Saya mencoba menggunakan nama kelas secara langsung di switchToFrame dan masih melihat masalah yang sama The specified frame was not found in the current frame or window.
. Hanya untuk memahami solusi solusi Anda dengan benar, haruskah saya memberikan nama kelas atau id langsung di browser.switchToFrame(id or classname)
. Apakah itu benar?
Pembaruan: solusi ini berfungsi untuk chrome, yaitu dan Edge. Tidak berfungsi untuk safari
Komentar yang paling membantu
Saya telah menemukan solusi untuk masalah ini berdasarkan keduanya:
Ini akan berfungsi di Chrome, FireFox, Ms Edge, IE11 dan Safari semua di bawah BrowserStack
let iFrame = $('//*[@name="iFrameSelector"]');
if (browser.capabilities.browserName === "MicrosoftEdge") iFrame = "iFrameSelector";
browser.switchToFrame(iFrame)