WebDriver - 等待使用Java的元素

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

我正在寻找类似的东西waitForElementPresent来检查元素是否显示在我点击它之前。我认为这可以通过implicitWait,所以我使用了以下内容:

driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

然后点击

driver.findElement(By.id(prop.getProperty(vName))).click();

不幸的是,有时候它会等待这个元素,有时候不会。我看了一会儿,发现这个解决方案:

for (int second = 0;; second++) {
            Thread.sleep(sleepTime);
            if (second >= 10)
                fail("timeout : " + vName);
            try {
                if (driver.findElement(By.id(prop.getProperty(vName)))
                        .isDisplayed())
                    break;
            } catch (Exception e) {
                writeToExcel("data.xls", e.toString(),
                        parameters.currentTestRow, 46);
            }
        }
        driver.findElement(By.id(prop.getProperty(vName))).click();

它等待好了,但在超时之前,它必须等待10秒5秒50秒。有点多。所以我将隐含的等待时间设置为1秒,直到现在看起来都很好。因为现在有些事情在超时前等待10秒,但其他一些事情在1秒后超时。

你如何覆盖代码中存在/可见的等待元素?任何提示都是可观的。

提问于
用户回答回答于

这就是我在代码中的做法。

WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<locator>));

要么

wait.until(ExpectedConditions.elementToBeClickable(By.id<locator>));

确切地说。

也可以看看:

用户回答回答于

您可以使用显式等待或流利等待

显式等待示例 -

WebDriverWait wait = new WebDriverWait(WebDriverRefrence,20);
WebElement aboutMe;
aboutMe= wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("about_me")));     

流利等待的例子 -

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)                            
.withTimeout(20, TimeUnit.SECONDS)          
.pollingEvery(5, TimeUnit.SECONDS)          
.ignoring(NoSuchElementException.class);    

  WebElement aboutMe= wait.until(new Function<WebDriver, WebElement>() {       
public WebElement apply(WebDriver driver) { 
return driver.findElement(By.id("about_me"));     
 }  
});  

查看这个教程了解更多细节。

扫码关注云+社区