Webdriverio: Tidak dapat menggunakan browser.switchToFrame() di MS Edge

Dibuat pada 24 Apr 2019  ·  3Komentar  ·  Sumber: webdriverio/webdriverio

Lingkungan :

  • Versi webdriverIO
  • Mode: [WDIO Testrunner/BROWSERSTACK]
  • Jika WDIO Testrunner, menjalankan sync/async: [sync]
  • Versi Node.js: [v8.11.3]
  • Versi NPM: [5.6.0]
  • Nama dan versi peramban: [MS Edge v16, v17, v18]
  • Nama dan versi platform: [macOS Mojave 10.14.4]
  • Paket wdio tambahan yang digunakan (jika berlaku): Contoh proyek dengan masalah yang sama di-host di 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"
  }

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.

  • Opsi 2

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

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)

Semua 3 komentar

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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat