当前位置: 首页 > 知识库问答 >
问题:

等效的waitForVible/waitForElementPresent在Selenium WebDriver测试中使用Java?

常元章
2023-03-14

使用超文本标记语言Selenium测试(使用Selenium IDE或手动创建),您可以使用一些非常方便的命令,如WaitForElementPresentWaitForVible

<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()调用将是丑陋和脆弱的,滚动自己的循环似乎也很笨拙...

共有3个答案

鞠泰平
2023-03-14

问题是,您可能实际上不希望测试无限期地运行。在库决定元素不存在之前,您只需要等待更长的时间。在这种情况下,最优雅的解决方案是使用隐式等待,它的设计目的就是:

driver.manage().timeouts().implicitlyWait( ... )
卢勇
2023-03-14
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));

这将在抛出TimeoutException之前等待10秒,或者如果找到元素,将在0-10秒后返回它。默认情况下,WebDriverWait每500毫秒调用一次ExpectedCondition,直到它成功返回。对于所有其他ExpectedCondition类型,成功返回的值为布尔返回true或非null。

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));

元素可单击-显示并启用该元素。

来自WebDriver文档:显式和隐式等待

盖诚
2023-03-14

隐式等待

隐式等待是在试图找到一个或多个元素时,如果它们不是立即可用的,则告诉WebDriver轮询DOM一段时间。默认设置为0。设置后,将为WebDriver对象实例的生命周期设置隐式等待。

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

显式等待期望条件

显式等待是指您定义为等待特定条件发生,然后在代码中继续执行的代码。最坏的情况是Thread.sleep(),它将条件设置为要等待的确切时间段。提供了一些方便的方法来帮助您编写只需要等待多长时间的代码。将WebDriver等待与预期条件相结合是实现这一目标的一种方式。

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(
        ExpectedConditions.visibilityOfElementLocated(By.id("someid")));
 类似资料:
  • 问题内容: 通过“ HTML” Selenium测试(通过Selenium IDE或手动创建),您可以使用一些非常方便的命令,例如 或 。 用Java编写Selenium测试(Webdriver / Selenium RC,我不确定这里的术语)时, 是否有类似的内置功能 ? 例如,用于检查对话框(需要一段时间才能打开)是否可见… 编写此类检查的最干净 可靠的 方法是什么? 到处添加呼叫将是丑陋且脆

  • 在我的公司,我使用SeleniumWebDriver进行自动化测试来自动化Web应用程序,但我直接使用id、xpath和所有工具,而不遵循任何框架,因此现在我遇到了一些问题,必须设计数据驱动的框架。 请建议我如何在eclipse下设置DatadrivenFramwework。要遵循哪些步骤和所有步骤。 谢谢

  • 有没有任何一个测试REST API的使用硒网络驱动程序Maven TestNG。请分享信息或样本项目

  • 我有一组只在Visual Studio本地执行的UI测试。决定将它们集成到TFS中,并在每晚的构建中执行测试运行。 你知道我做错了什么吗?

  • 问题内容: 我已经写了某些没有主要方法的代码。但是我想知道代码是否有任何问题。基本上,我可以使用Eclipse中的JUnit测试用例来实现(我使用的是Linux)。但是我必须在目前没有Eclipse的Windows中进行测试。因此,我可以选择在cmd中进行操作(如果可能的话)。在cmd中等效的JUnit测试(Eclipse)是什么? 问题答案: 查看此页面:http : //junit.sourc

  • 我实际上有三个问题: Selenium WebDriver如何实现此 因为我们不能给无限睡眠的线程一个负值。 有没有更好的方法来实现无限等待? 我们在SeleniumWebDriver文档中看到了这一点