0

Selenium WebDriverが1回だけ実行した後、forループを終了する問題があります。おそらく、ページが読み込まれる前にコンテンツとループが開始されることに問題があります。ページが読み込まれるまでWebドライバーを待機させる可能性はありますか?

List<WebElement> albums = new ArrayList<WebElement>();
    albums = driver.findElements(By.className("album_title"));

    for (WebElement we : albums) {

        we.click();
        if (driver.findElement(By.id("delete_album_prompt")).isDisplayed()) {
            driver.findElement(By.id("delete_album_prompt")).click();
            driver.findElement(By.id("delete_album_yes")).click();
        } else {
            break;
        }

    }
4

5 に答える 5

1

TimeOutが値として定義されている場合に、これを使用しintます。

Wait wait = DriverManager.getWait(Driver.TIMEOUT);
wait.until(ExpectedConditions.visibilityOfElementLocated(by));

基本的に、要素がロードされるのを待ちます。これは、睡眠を提供するよりも優れています。

于 2013-06-12T05:29:41.200 に答える
1

要素がロードされるまで待つ必要があります。

Selenium のドキュメントでは、Google ページが読み込まれるまで待機する次の例が提供されています。この場合、タイトル要素がロードされて指定された値になるまで、最大で 10 秒待機します。

// Google's search is rendered dynamically with JavaScript.
// Wait for the page to load, timeout after 10 seconds
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
    public Boolean apply(WebDriver d) {
       return d.getTitle().toLowerCase().startsWith("cheese!");
    }
});
于 2012-12-18T12:59:32.757 に答える
0

Thread.sleep(20000); を使用できます。ループが始まる前にこのメソッドを使用します。

于 2012-12-18T14:36:00.310 に答える
0

リスト内のアイテムをチェックしていると思います

driver.findElement(By.id("delete_album_prompt")).isDisplayed() 

これは最初のアイテムに対して true を返しますが、リスト内の残りのアイテムに対しては false を返します。これらのアイテムは表示されないためです。それがループから抜け出す理由です。

そこに存在するアイテムを確認するには、次の関数を使用できますif

private boolean isElementPresent(WebDriver driver, By by){
try{
driver.findElement(by);
return true;
}catch(NoSuchElementException e){
return false;
}
}
于 2012-12-18T14:36:41.597 に答える