Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium Java保持刷新页面,直到元素可见_Java_Selenium_Selenium Webdriver - Fatal编程技术网

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

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()会抛出异常-因此循环旋转一次,抛出异常,循环停止

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

我需要页面保持刷新,直到元素可见

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等原因,元素从未出现,该怎么办。?