WebDriver退出

时间:2012-12-18 12:46:24

标签: java selenium-webdriver

Selenium WebDriver在执行一次后退出for循环时出现问题。据推测,这是在加载页面之前获取内容和循环的问题。是否有可能让webdriver等到页面加载?

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;
        }

    }

5 个答案:

答案 0 :(得分:1)

您需要等待加载元素。

Selenium documentation中,他们提供了以下示例,该示例将等到加载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!");
    }
});

答案 1 :(得分:1)

使用此选项,其中TimeOut定义为int值。

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

基本上等待元素加载。这比提供睡眠更好。

答案 2 :(得分:0)

你可以使用Thread.sleep(20000);在循环开始之前使用此方法。

答案 3 :(得分:0)

我想,您正在检查列表中的项目

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

对于第1项将返回true,但对于列表中的剩余项目,它将返回false,因为这些项目不会显示。这就是它退出环路的原因。

您可以使用以下功能检查if

中的项目
private boolean isElementPresent(WebDriver driver, By by){
try{
driver.findElement(by);
return true;
}catch(NoSuchElementException e){
return false;
}
}

答案 4 :(得分:0)

我正在使用 - wait.until(elementToBeClickable(By.id(“id”)));它有效!