0

ここに超初心者。

ツイートのリストを返すページ、または利用できるものがない場合は結果ページがないページをテストしています。したがって、2つの可能な結果があります。どちらかの要素をテストするアサーションをSelenium2で書き込もうとしていますが、どちらも表示されない場合はエラーを返します。

私はページオブジェクトモデルを使用しており、次のように書いています。

Assert.assertTrue((iu.twitterUsername().isDisplayed()) || (iu.noData().isDisplayed()), "Page is not loading")

ただし、データなしページが表示されているときに、ORステートメントの最初の部分に要素が見つかりません。'isDisplayed'のポイントは、要素がそこにあるかどうかを確認することだと思いました。要素が見つからないというエラーが発生するのはなぜですか?明らかにそこにはありません。ORステートメントの2番目の部分に移りたいと思います。

許容できる結果が2つある場合、これを書くためのより良い方法はありますか?

4

2 に答える 2

0

WebElement.isDisplayed() メソッドは、要素がそこにあるかどうかを教えてくれません。(非表示ではなく) ページに表示されているかどうかを示します。

WebDriver.findElement() メソッドを使用して、要素がロードされたかどうかをテストできます。そうでない場合は、NoSuchElementException がスローされます。メソッドは次のようになります。

public static boolean isElementLoaded(WebDriver driver, By findBy) {
    try {
        driver.findElement(findBy));
    } catch (NoSuchElementException e) {
        return false;
    } 
    return true;     
}

WebDriver が要素のロードを待機する時間を次のように変更できます。これにより、5 秒に変更されます。

driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

または、タイムアウトに達するまで要素をポーリングするメソッドを作成できます。

于 2013-01-16T05:59:10.160 に答える
0

それは次のように単純でなければなりません

WebDriver driver = new FirefoxDriver();
WebElement element = driver.findElement(By.id(id));

要素を探す前に何かをしていると仮定すると、割り当てられた時間内に要素が見つからない場合は、 WebDriverWait を使用して例外をスローしてキャッチすることをお勧めします。

WebDriverWait wait = new WebDriverWait(driver, 10);
try {
   wait.until(ExpectedConditions.elementToBeSelected(By.id(id)));
} catch (ElementNotFound e) {};
element = driver.findElement(By.id(id));
于 2013-01-16T22:28:09.823 に答える