使用超文本标记语言Selenium测试(使用Selenium IDE或手动创建),您可以使用一些非常方便的命令,如WaitForElementPresent
或WaitForVible
。
<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()
调用将是丑陋和脆弱的,滚动自己的循环似乎也很笨拙...
问题是,您可能实际上不希望测试无限期地运行。在库决定元素不存在之前,您只需要等待更长的时间。在这种情况下,最优雅的解决方案是使用隐式等待,它的设计目的就是:
driver.manage().timeouts().implicitlyWait( ... )
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文档:显式和隐式等待
隐式等待
隐式等待是在试图找到一个或多个元素时,如果它们不是立即可用的,则告诉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文档中看到了这一点