Selenium Java保持刷新页面,直到可见元素为止。
我需要Page保持刷新,直到可见元素为止。
do{
driver.navigate().refresh();
//DEV
}while(!driver.findElement(By.xpath("//*[text()='UserID']")).isDisplayed());
此代码仅刷新一次。我需要保持刷新(10次或更多次)直到可见元素。
答案 0 :(得分:0)
如果元素不存在,findElement()
会引发异常-因此循环旋转一次,引发异常,然后循环停止。所以您需要处理:
boolean displayed = false;
do{
try{
displayed = driver.findElement(By.xpath("//*[text()='UserID']")).isDisplayed());
} catch (NoSuchElementException){
driver.navigate().refresh();
}
} while(!displayed);
如果添加一些计数器/最大计时器逻辑,则不会造成麻烦,否则,如果元素未出现,则循环将不断旋转。
答案 1 :(得分:0)
您可以通过使用List<WebElement>
来拾取元素来检查元素的大小,然后刷新页面,直到列表的大小大于0(因为该元素的列表的大小将大于在用户界面上显示时为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();
}
}
答案 2 :(得分:0)
您可以使用findElements代替findElement,也可以处理异常&&实现计数器(如@Todor所述)。
如果找不到匹配的元素,则 findElements()
将返回一个空列表。
do {
//xyz
} while(driver.findElements(By.xpath("//*[text()='UserID']")).isEmpty())
如果找到至少一个元素,则返回true;否则,返回false。
从文档中
每种语言绑定都公开了“查找元素”和“查找 元素”方法。前者返回与 查询,如果找不到该元素,则会引发异常。的 后者返回WebElement列表,如果没有DOM,则可能为空 元素与查询匹配。