環境 :
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()は、Microsoft Edgeバージョン16、17、および18ではiFrameに切り替わりません。同じコマンドとコードスニペット(「再現するには」セクションを参照)は、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に切り替えて、MSEdgeでその中の要素を取得して見つけることができる機能です。
ログ
コンソールログとwdioログはここで共有されます要点
追加のコンテキスト
当初、この質問はGitterチャネルで行われ、今日@ christian-bromannと話し合いました。彼は、ここで詳細を記載した問題を作成することを推奨しました。
この問題3774も確認しましたが、GitHubで共有したコード(上記のセクションを参照)はEdgeを除くすべてのブラウザーで完全に機能するため、関係がないようです。
@ christian-bromann動作し、テスト済みの回避策があるので、問題を解決できてうれしいです。
ありがとうございました
私はこの解決策を彼のために働かせることができません。 switchToFrameでクラス名を直接使用しようとしましたが、同じ問題The specified frame was not found in the current frame or window.
ます。 回避策を正しく理解するために、クラス名またはIDをbrowser.switchToFrame(id or classname)
直接指定する必要があります。 あれは正しいですか?
更新:このソリューションは、クロム、つまりエッジで機能します。 サファリでは動作しません
最も参考になるコメント
私は両方に基づいてこの問題の回避策を見つけました:
これは、すべてBrowserStackの下のChrome、FireFox、Ms Edge、IE11、およびSafariで機能します。
let iFrame = $('//*[@name="iFrameSelector"]');
if (browser.capabilities.browserName === "MicrosoftEdge") iFrame = "iFrameSelector";
browser.switchToFrame(iFrame)