如何循环Thread.sleep()语句,直到使用Java在Selenium Webdriver中找到指定的元素

如何循环Thread.sleep()语句,直到使用Java在Selenium Webdriver中找到指定的元素,java,selenium,Java,Selenium,我想循环Thread.sleep()语句,在找到指定的元素之前,我不想在Thread.sleep()语句中给出指定的时间,而是想循环Thread.sleep。因此,它应该每秒钟检查一次元素,如果元素找到了,那么它应该中断循环 如果您想等待元素出现或与一起使用,是否有人可以在这方面帮助我 Wait将忽略遇到的NotFoundException实例 (抛出)默认情况下处于“直到”状态,并且立即 传播所有其他信息。您可以通过调用将更多内容添加到忽略列表中 忽略(要添加的异常) 为什么不呢

我想循环Thread.sleep()语句,在找到指定的元素之前,我不想在Thread.sleep()语句中给出指定的时间,而是想循环Thread.sleep。因此,它应该每秒钟检查一次元素,如果元素找到了,那么它应该中断循环


如果您想等待元素出现或与一起使用,是否有人可以在这方面帮助我

Wait将忽略遇到的NotFoundException实例 (抛出)默认情况下处于“直到”状态,并且立即 传播所有其他信息。您可以通过调用将更多内容添加到忽略列表中 忽略(要添加的异常)

为什么不呢

            while(!howeverYouWantToCheckIfFound){
            try{
             thread.sleep(1000);}Catch(exception e){}
            }

对@Madhan的答案稍加改进,您还可以设置检查元素状态之间的睡眠间隔。这样做:

WebDriverWait wait = new WebDriverWait(getDriver(), TIME_OUT, TIME_TO_SLEEP);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("XPATH")));
waitFor(ExpectedConditions.elementToBeClickable(webElement),"Cannot click webElement");

我个人喜欢
FluentWait
以及
ExpectedCondition
。使用
忽略
amd
pollingEvery
方法可以很好地配置它

protected <T> T waitFor(ExpectedCondition<T> condition, String errorMessage) {
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
                             .withTimeout(10, SECONDS)
                             .ignoring(NullPointerException.class)
                             .ignoring(StaleElementReferenceException.class)
                             .ignoring(NoSuchElementException.class)
                             .ignoring(ElementNotVisibleException.class)
                             .ignoring(WebDriverException.class)
                             .pollingEvery(100, MILLISECONDS)
                             .withMessage(errorMessage);
T result = wait.until(condition);
return result;
}  

我不想在Thread.sleep()和每秒中指定时间。你到底想发生什么?我已经删除了
多线程
标记,因为它似乎不相关。谢谢madhan,但我已经使用webdriver wait检查了所有可能的六种方法,仍然不起作用,所以我想使用线程。sleep为此,你有循环线程的解决方案吗。sleep()??@SumanthUrs将等待时间增加到120秒或240秒。为什么需要线程。无论如何,Sleep WebDriver wait不起作用,因此我使用Thread.Sleep(),假设我给出了5秒的时间,如果元素在3秒内找到,则它应该跳过剩余的2秒并执行该操作。它不应该等待5秒,所以我想循环条件。。有什么解决办法吗??而不是webdriver waitWebdriver WaitWork,它只会在找到元素后才继续工作。它不会等待整个过程time@SumanthUrs你有没有检查过元素是否存在于一个框架或其他东西中,因为它是不可编译的。哇,你是怎么检查文件的。我的意思是什么在这里不起作用?
waitFor(ExpectedConditions.elementToBeClickable(webElement),"Cannot click webElement");