Среда :
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.
На 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)
@ christian-bromann Я рад закрыть проблему, так как существует работающее и проверенное решение.
Спасибо
Я не могу заставить это решение работать на него. Я попытался использовать имя класса непосредственно в switchToFrame, но все еще вижу ту же проблему The specified frame was not found in the current frame or window.
. Чтобы правильно понять ваше временное решение, я должен указать имя класса или идентификатор непосредственно в browser.switchToFrame(id or classname)
. Это верно?
Обновление: это решение работает для хрома, т.е. и края. Не работает для сафари
Самый полезный комментарий
Я нашел обходной путь для этой проблемы, основанный на обоих:
Это будет работать в Chrome, FireFox, Ms Edge, IE11 и Safari под BrowserStack.
let iFrame = $('//*[@name="iFrameSelector"]');
if (browser.capabilities.browserName === "MicrosoftEdge") iFrame = "iFrameSelector";
browser.switchToFrame(iFrame)