ページ上にボタンとdiv要素があります。非同期(すなわち、AJAX呼び出し後)のdivのテキストを変更するJavaScript、ボタンをクリックするとインターンと非同期ページのテストを変更します
<button /><div>old text</div>
。どのように私はインターンでそれをテストすることができますか?
これは動作しません:
function testButtonClick() {
return command
.findByTagName('button')
.click()
.end()
.findByTagName('div')
.getVisibleText()
.then(function(text) { assert.strictEqual(text,'new text')}); //errror, text is 'old text'
}
私は.end()
後.sleep(5000)
を追加する場合は(私の非同期要求は通常5秒で行われるため)、それは[OK]を動作します。しかし、私はずっと待たずに待っています。なぜなら、非同期は通常より早く終了するからです。
しかし、スリープ時間を低く設定すると、要求が完了する前にテストされる危険性があります。
良い方法がありますか?それがnull、未定義の答えを返すまで繰り返しブラウザのコンテキストで関数を実行するまで
return command
.findByTagName('button')
.click()
.end()
.then(pollUntil(function() {
var el = document.getElementByName('div');
if (el && el.textContent === 'new text') {
return true;
}
}, 5000));
ポーリング、またはまで: