一尘不染

是否等效于使用Java的Selenium WebDriver测试中的waitForVisible / waitForElementPresent?

selenium

通过“ HTML” Selenium测试(通过Selenium
IDE或手动创建),您可以使用一些非常方便的命令,例如 WaitForElementPresent
WaitForVisible

<tr>
    <td>waitForElementPresent</td>
    <td>id=saveButton</td>
    <td></td>
</tr>

用Java编写Selenium测试(Webdriver / Selenium RC,我不确定这里的术语)时, 是否有类似的内置功能

例如,用于检查对话框(需要一段时间才能打开)是否可见…

WebElement dialog = driver.findElement(By.id("reportDialog"));
assertTrue(dialog.isDisplayed());  // often fails as it isn't visible *yet*

编写此类检查的最干净 可靠的 方法是什么?

Thread.sleep()到处添加呼叫将是丑陋且脆弱的,并且滚动自己的while循环也显得很笨拙…


阅读 419

收藏
2020-06-26

共1个答案

一尘不染

[隐式和显式等待](http://seleniumhq.org/docs/04_webdriver_advanced.html#explicit-

and-implicit-waits)

隐式等待

隐式等待是告诉WebDriver在尝试查找一个或多个元素(如果不是立即可用)时轮询DOM一定时间。默认设置为0。设置后,将在WebDriver对象实例的生存期内设置隐式等待。

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

显式等待+
预期条件

显式等待是您定义的代码,用于等待特定条件发生后再继续执行代码。最糟糕的情况是Thread.sleep(),它将条件设置为要等待的确切时间段。提供了一些方便的方法,可以帮助您编写仅等待所需时间的代码。WebDriverWait与ExpectedCondition结合是实现此目的的一种方法。

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(
        ExpectedConditions.visibilityOfElementLocated(By.id("someid")));
2020-06-26