Selenium Java保持刷新页面,直到元素可见
SeleniumJava保持刷新页面,直到元素可见 我需要页面保持刷新,直到元素可见Selenium Java保持刷新页面,直到元素可见,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,SeleniumJava保持刷新页面,直到元素可见 我需要页面保持刷新,直到元素可见 do{ driver.navigate().refresh(); //DEV }while(!driver.findElement(By.xpath("//*[text()='UserID']")).isDisplayed()); 此代码只刷新一次。我需要保持刷新(10次或更多次),直到元素可见 如果元素不存在,findElement()会抛出异常-因此循环旋转一次,抛出异常,循环停止
do{
driver.navigate().refresh();
//DEV
}while(!driver.findElement(By.xpath("//*[text()='UserID']")).isDisplayed());
此代码只刷新一次。我需要保持刷新(10次或更多次),直到元素可见 如果元素不存在,findElement()
会抛出异常-因此循环旋转一次,抛出异常,循环停止。所以你需要处理这个问题:
boolean displayed = false;
do{
try{
displayed = driver.findElement(By.xpath("//*[text()='UserID']")).isDisplayed());
} catch (NoSuchElementException){
driver.navigate().refresh();
}
} while(!displayed);
如果添加一些counter/max定时器逻辑,则不会有任何影响,否则如果元素不出现,循环将无休止地旋转 您可以通过使用
List
拾取元素来检查元素的大小,然后刷新页面,直到列表的大小大于0(因为该元素的列表在UI上显示时将大于0)
上述逻辑的代码可以如下所示:
int refreshCount = 10;
List<WebElement> element = driver.findElements(By.xpath("//[text()='UserID']"));
for (int i = 0; i < refreshCount; i++) {
if (element.size() > 0) {
// Do the operation here on the element
} else {
driver.navigate().refresh();
}
}
int refreshCount=10;
List元素=driver.findElements(By.xpath(“//[text()='UserID']”);
对于(inti=0;i0){
//在元素上执行此操作
}否则{
driver.navigate().refresh();
}
}
您可以使用findElement而不是findElement,或者您可以处理异常并实现@Todor提到的健全计数器
findElements()
如果没有找到匹配的元素而不是异常,则将返回空列表
do {
//xyz
} while(driver.findElements(By.xpath("//*[text()='UserID']")).isEmpty())
如果至少找到一个元素,则返回true;如果元素不存在,则返回false
从文件来看
每个语言绑定都公开一个“Find元素”和“Find元素”
“元素”法。前者返回一个与
查询,如果找不到这样的元素,将引发异常。这个
后者返回WebElements列表,如果没有DOM,则可能为空
元素与查询匹配
你确定它没有按预期工作吗?是否有其他元素与该定位器匹配?我看不出那个密码有什么问题。我会添加一个计数器,在某个点上测试失败。。。如果由于bug等原因,元素从未出现,该怎么办。?