0

「進行中」という値を持つ「ステータス」フィールドを持つページがあります。何らかのアクション (ボタンのクリック) で、ステータスが Completed に変わります。Seleniumを使用して同じことを確認する必要があります。

getVisibleElement(By.id("status")).getText()

問題は、ボタンをクリックしてもステータスがすぐに進行中から完了に変わらないことです。AJAX 応答が数秒で受信された後に発生します。そして、コードがステータス テキストをアサートしようとすると、実際には古い値 In Progress が取得されるため、テストに失敗します。

getVisibleElement() にはタイムアウトが定義されていますが、要素がとにかく存在するため、ここでは役に立ちません。AJAX リクエスト (投稿ボタンのクリック) で再度レンダリングされます。

同じ問題を修正するにはどうすればよいですか? アサートの直前に固定遅延を追加できます。はいの場合、セレンでそれを行うにはどうすればよいですか?

4

2 に答える 2

2

ユースケースが次の場合

  1. ユーザーがページに来る
  2. 進行中と表示される
  3. ユーザーがボタンを押す
  4. しばらくすると、テキストが Completed に変わります

次に、このようにWeb Drivers Explicit Waitsを使用できます

@Test
public testProgress() {
    driver.get("progressPage.html");
    assertEquals("In Progress", driver.findElement(By.id("progressBar").getText());
    WebElement myDynamicElement = (new WebDriverWait(driver, 10))
       .until(ExpectedConditions.textToBePresentInElement(By.id("progressBar")));
    assertEquals("Completed", driver.findElement(By.id("progressBar").getText());
}
于 2013-11-12T12:39:21.883 に答える
0

executeAsync を使用して、その値の変更をリッスンし、目的の値に達するかタイムアウトが発生したときに戻る JavaScript ピースを挿入します。

https://stackoverflow.com/a/28057738/475949の回答をご覧ください

于 2015-12-13T11:02:50.397 に答える