WKWebviews を使用してデータを表示する iOS アプリの自動テストを作成しています。ユーザーがネイティブ テキスト フィールドにクエリを入力すると、結果が Web ビュー内に表示されます。問題は、HTML で予想される構造をチェックするときに一貫性のない動作が発生したことです。
私が期待しているHTMLは次のとおりです。
<div id="results">
<div class="frame">
<div class="card">
// here my data
</div>
</div>
</div>
これらAppium
の 3 つの div が次のように存在するという非常に単純なケースを確認します。
it("should display results inside the web view", function () {
return driver
.waitForElementByName("Address and Search")
.sendKeys("search query")
.sleep(1000)
.contexts().then(function (contexts) { // get list of available views. Returns array: ["NATIVE_APP","WEBVIEW_1"]
return driver.context(contexts[1]); // choose the webview context
})
.waitForElementById("results", 60000)
.waitForElementByCss(".frame", 60000)
.waitForElementByCss(".card", 60000)
.sleep(3000)
});
テストを実行するたびに異なる結果が得られます。すべての要素が検出される場合もあれば、最初の要素 ( waitForElementById
) のみが検出される場合もあり、それ以上の要素を取得できません。
これが私の構成です:
exports.ios93 = {
browserName: '',
'appium-version': '1.4.13',
platformName: 'iOS',
platformVersion: '9.3',
deviceName: 'iPhone 6',
app: undefined // will be set later
};
次のようにして問題を解決しようとしました。
次のように切り替えた後に遅延を追加WEBVIEW
します。
.context('WEBVIEW_1')
.sleep(25000)
ウィンドウを次のように変更します。
.context('WEBVIEW_1')
.windowHandles()
.then(function(handles) {
driver.window(handles[handles.length-1])
})
しかし、これは何の効果もありませんでした。
でテストする場合、アプリの Android バージョンにはこれらすべての問題がないことに注意してくださいAppium
。