我需要 JAVA Selenium 的帮助。我无法让 Web 驱动程序在 while 循环中找到我想要的元素。我尝试在没有 while 循环的情况下执行此操作,它会起作用。但是,如果没有 while 循环,我无法让 Web 驱动程序在等待元素加载时重新加载页面。如果有人能在这方面帮助我,我将不胜感激。
我的代码的问题是它不会退出循环,因为elementProgress永远是FALSE,因为 Web 驱动程序没有检测到按钮,因此不会更新elementProgress布尔值。
//check if progress button exist
boolean elementProgress;
elementProgress = driver.findElements(By.cssSelector("tr:nth-child(1) .iconLabel")).size() != 0;
//auto reload page to prevent webpage timeout
while (!elementProgress) {
TimeUnit.SECONDS.sleep(15);
driver.navigate().refresh();
boolean check_dl_queue = driver.findElements(By.cssSelector(".cell > .table .total_records")).size() != 0;
if (!check_dl_queue) {
driver.navigate().refresh();
}
Thread.sleep(1500);
driver.navigate().refresh();
elementProgress = driver.findElements(By.cssSelector("tr:nth-child(1) .iconLabel")).size() != 0;
System.out.println("P2:" + elementProgress); //to printout element status
}
我已经找到了解决方案,没有时间在这里发布。下面是解决方法。
//boo stat for while loop
boolean elementProgress = true;
boolean elementProgress2 = true;
//setup new web driver wait
WebDriverWait dl_wait = new WebDriverWait(driver, 15);
//auto reload page to prevent webpage timeout
while (elementProgress) {
driver.navigate().refresh();
//start button click
try {
//phase 1: wait for button 1, if exceed wait time goto exception
dl_wait.until(presenceOfElementLocated(By.cssSelector("tr:nth-child(1) .iconLabel")));
retryingFindClick(By.cssSelector("tr:nth-child(1) .iconLabel"));
//phase 2: refresh page after button successfully clicked
driver.navigate().refresh();
//phase 3: wait for button 2, if exceed wait time goto exception
while(elementProgress2) {
try {
dl_wait.until(presenceOfElementLocated(By.cssSelector("tr:nth-child(1) .icon-cancel")));
retryingFindClick(By.cssSelector("tr:nth-child(1) .icon-cancel"));
//exit elementProgress2 while loop
elementProgress2 = false;
} catch(Exception ex) {
//refresh page to counter false positive element not found exception
driver.navigate().refresh();
}
}
//exit elementProgress while loop
elementProgress = false;
} catch(Exception ex) {
//refresh page to counter false positive element not found exception
driver.navigate().refresh();
}
}
public boolean retryingFindClick(By by) {
boolean result = false;
int attempts = 0;
while(attempts < 2) {
try {
driver.findElement(by).click();
result = true;
break;
} catch(StaleElementReferenceException e) {
}
attempts++;
}
return result;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句