Selenium Java保持刷新页面,直到可见元素

时间:2019-01-23 19:18:57

标签: java selenium selenium-webdriver

Selenium Java保持刷新页面,直到可见元素为止。

我需要Page保持刷新,直到可见元素为止。

do{
        driver.navigate().refresh();
    //DEV
}while(!driver.findElement(By.xpath("//*[text()='UserID']")).isDisplayed());

此代码仅刷新一次。我需要保持刷新(10次或更多次)直到可见元素。

3 个答案:

答案 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,则可能为空   元素与查询匹配。