对于“HTML”Selenium测试(使用Selenium IDE创建或手动创建),您可以使用一些very handy commands,如**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循环似乎也相当笨拙。
6条答案
按热度按时间i7uaboj41#
∮ ∮ ∮ ∮
隐式等待
隐式等待是告诉WebDriver在尝试查找一个或多个元素(如果这些元素不能立即可用)时轮询DOM一段时间。默认设置为0。设置后,隐式等待将设置为WebDriver对象示例的生命周期。
显式等待+ Expected Conditions
显式等待是您定义的代码,用于等待某个条件发生,然后再继续执行代码。最坏的情况是Thread.sleep(),它将条件设置为等待的确切时间段。提供了一些方便的方法,帮助您编写只等待所需时间的代码。WebDriverWait与ExpectedCondition结合使用是可以实现此目的的一种方法。
bjg7j2ky2#
这将在抛出TimeoutException之前等待最多10秒,或者如果发现元素,将在0 - 10秒内返回该元素。默认情况下,WebDriverWait每隔500毫秒调用一次ExpectedCondition,直到它成功返回。成功返回是指ExpectedCondition类型为布尔值,返回值为true,或者所有其他ExpectedCondition类型的返回值不为null。
元素可单击-显示并启用。
从WebDriver docs: Explicit and Implicit Waits开始
a0x5cqrl3#
实际上,你可能并不想让测试无限期地运行,你只是想在库确定元素不存在之前等待更长的时间,在这种情况下,最优雅的解决方案是使用隐式等待,它就是为此而设计的:
r1zhe5dt4#
另一种方法是等待某个数量的最大值,比如说10秒的时间,让元素显示如下:
y1aodyip5#
k2arahey6#
对于单个元素,可使用以下代码: