问题:等效于使用 Java 的 Selenium WebDriver 测试中的 waitForVisible/waitForElementPresent?

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

<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*

编写此类检查的最简洁的_robust_方法是什么?

在整个地方添加Thread.sleep()调用将是丑陋和脆弱的,并且滚动你自己的 while 循环似乎也很笨拙......

解答

隐式和显式等待

隐式等待

隐式等待是告诉 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")));
Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐