0

UIオートメーションにPageObject/PageFactoryデザインパターンを使用しています。Selenium 2.0 WebDriver、JAVAを使用すると、ランダムに次のエラーが発生します。org.openqa.selenium.StaleElementReferenceException:次のようなロジックを試行すると、要素がDOMにアタッチされなくなります。

@FindBy(how = HOW.ID, using = "item")
private List<WebElement> items

private void getItemThroughName(String name) {
    wait(items);

    for(int i = 0; i < items.size(); i++) {
        try {
            Thread.sleep(0500);
        } catch (InterruptedException e) { }

        this.wait(items);
        if(items.get(i).getText().contains(name)) {
            System.out.println("Found");
            break;
        }
    }
}

エラーはifステートメントの行でランダムに発生します。これを回避するために、少し時間をとったり、要素を再度待機したりするなど、これを回避するためにいくつかのことを試みましたが、どちらも100%の時間は機能しません。

4

1 に答える 1

1

まず、「アイテム」のIDを持つ複数の要素が実際に存在する場合は、バグをログに記録するか、サイトの開発者に相談して修正する必要があります。IDは一意であることが意図されています。

質問に対するコメントがすでに示唆しているように、この場合はExplicitWaitを使用する必要があります。

private void getItemThroughName(String name) {
    new WebDriverWait(driver, 30)
               .until(ExpectedConditions.presenceOfElementLocated(
                 By.xpath("id('item')[.='" + name + "']")
               ));
    // A timeout exception will be thrown otherwise
    System.out.println("Found");
}
于 2012-09-04T21:45:38.253 に答える