Java 正在退出的WebDriver用于

Java 正在退出的WebDriver用于,java,selenium-webdriver,Java,Selenium Webdriver,我对Selenium WebDriver在只执行一次后退出for循环有问题。可能是在页面加载之前获取内容和循环启动的问题。是否有可能让webdriver等待页面加载 List<WebElement> albums = new ArrayList<WebElement>(); albums = driver.findElements(By.className("album_title")); for (WebElement we : albums) {

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

    }
List albums=new ArrayList();
albums=driver.findElements(按.className(“album_title”);
for(WebElement我们:相册){
we.click();
if(driver.findElement(By.id(“删除相册提示”)).isDisplayed()){
driver.findElement(By.id(“删除相册提示”))。单击();
driver.findElement(By.id(“delete_相册_yes”)。单击();
}否则{
打破
}
}

您需要等待加载元素

在中,他们提供了以下示例,将等待google页面加载。在本例中,它最多等待10秒,等待加载title元素并具有指定的值

// 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!");
    }
});
//谷歌的搜索是用JavaScript动态呈现的。
//等待页面加载,10秒后超时
(新的WebDriverWait(驱动程序,10))。直到(新的预期条件(){
公共布尔应用(WebDriver d){
返回d.getTitle().toLowerCase().startsWith(“cheese!”);
}
});

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

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

driver.findElement(By.id("delete_album_prompt")).isDisplayed() 
对于第一个项目,它将返回true,但对于列表中的其余项目,它将返回false,因为这些项目不会显示。这就是它退出循环的原因

如果

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

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

Wait wait = DriverManager.getWait(Driver.TIMEOUT);
wait.until(ExpectedConditions.visibilityOfElementLocated(by));
基本上是等待一个元素被加载。这比提供睡眠要好。

我正在使用-wait.until(elementtobelickable(By.id(“id”));它起作用了