Webdriverio: Невозможно использовать browser.switchToFrame () в MS Edge

Созданный на 24 апр. 2019  ·  3Комментарии  ·  Источник: webdriverio/webdriverio

Среда :

  • Версия WebdriverIO: ["webdriverio": "^ 5.7.15"]
  • Режим: [WDIO Testrunner / BROWSERSTACK]
  • Если WDIO Testrunner, выполняется синхронизация / асинхронность: [синхронизация]
  • Версия Node.js: [v8.11.3]
  • Версия NPM: [5.6.0]
  • Название и версия браузера: [MS Edge v16, v17, v18]
  • Название и версия платформы: [macOS Mojave 10.14.4]
  • Использованы дополнительные пакеты wdio (если применимо): пример проекта с той же проблемой размещен на 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"
  }

Конфигурация 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
    }
}

Опишите ошибку
Команда browser.switchToFrame () не переключает на iFrames в версиях Microsoft Edge 16, 17 и 18. Та же команда и фрагмент кода (см. Раздел «Воспроизведение») работают в Chrome, FireFox, Safari и IE11.

Воспроизводить

npm run test:local Убедитесь, что драйвер вашего браузера запущен
npm run test:remote Убедитесь, что вы вставили BrowserStack user и key в wdio.remote.conf.js

После запуска простого теста в browser.switchToFrame(parentFrame) запускается ошибка со следующим сообщением ERROR webdriver: Request failed due to no such frame: The specified frame was not found in the current frame or window.

  • Варианты 2

На Ms Edge - предпочтительно BrowserStack, но это не должно иметь никакого значения - запустите команду browser.switchToFrame(element) или browser.switchToFrame(element.elementId) и вы получите ту же ошибку, что и в option1.

Ожидаемое поведение
Ожидаемое поведение - это возможность переключиться в iFrame и иметь возможность извлекать и находить элементы внутри него в MS Edge.

Бревно

Журналы консоли и журналы wdio доступны здесь суть

Дополнительный контекст
Первоначально этот вопрос был задан на канале Gitter и обсужден с @ christian-bromann сегодня, и он рекомендовал создать здесь проблему с более подробной информацией.
Обратите внимание, что я также проверил эту проблему 3774, но, похоже, она не связана, поскольку код, который я опубликовал на GitHub (см. Раздел выше), отлично работает во всех браузерах, кроме Edge.

Самый полезный комментарий

Я нашел обходной путь для этой проблемы, основанный на обоих:

Это будет работать в Chrome, FireFox, Ms Edge, IE11 и Safari под BrowserStack.

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

Все 3 Комментарий

Я нашел обходной путь для этой проблемы, основанный на обоих:

Это будет работать в Chrome, FireFox, Ms Edge, IE11 и Safari под BrowserStack.

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

@ christian-bromann Я рад закрыть проблему, так как существует работающее и проверенное решение.
Спасибо

Я не могу заставить это решение работать на него. Я попытался использовать имя класса непосредственно в switchToFrame, но все еще вижу ту же проблему The specified frame was not found in the current frame or window. . Чтобы правильно понять ваше временное решение, я должен указать имя класса или идентификатор непосредственно в browser.switchToFrame(id or classname) . Это верно?

Обновление: это решение работает для хрома, т.е. и края. Не работает для сафари

Была ли эта страница полезной?
0 / 5 - 0 рейтинги