2017-07-12 5 views
0

ページ上にボタンと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)); 

ポーリング、またはまで:

答えて

1

最も効率的なソリューションをpollUntil、のようなものを使用することですそれはタイムアウトします。上記のスニペットでは、要素が存在し、期待されるテキストがある場合はポーリング関数がtrueを返し、それ以外の場合は未定義を返します。 5000ms後にタイムアウトしますが、期待されるテキストが表示されるとすぐに終了します。

関連する問題