java - Selenium 测试: Programming a more robust test

标签 java selenium

我正在尝试使用 Selenium Webdriver 自动执行涉及 JavaServer Page 的任务。我构建了一个测试,该测试的成功率约为 90%,这意味着 Webdriver 可以顺利完成所有任务,没有任何错误。在测试期间,浏览器执行以下操作:

  • 打开页面
  • 点击链接并切换窗口
  • 关闭原来的窗口
  • 登录系统
  • 切换框架
  • 点击链接
  • 填写表格
  • 提交表单
  • ...更多类似任务

不幸的是,有时 Webdriver 会随机在其中一个步骤上失败。这是因为它找不到某些内容,例如“找不到框架”、“无法找到带有链接文本的元素...”和其他类似错误。我不确定为什么有时会发生这种情况,并且它似乎在测试的不同阶段随机发生。我四处寻找解决方案,我能做的最好的事情就是在程序的各个阶段使用 thread.sleep 减慢 Webdriver 的速度。对我来说,这似乎是一种非常随意的解决问题的方法,我什至不确定问题是司机开得太快了。即使我放慢半秒,有时仍然会出现错误。我是 Selenium 的新用户,我不知道这是否通常是一个问题。有没有人有更好的方法来解决这个问题?我是否忽略了一些简单的事情?

最佳答案

我最初使用线程 sleep 来开发我的脚本,也是这样做的。然而,即使脚本在开发时可以工作,但在生产运行中它不现实,因为它不一致地失败 - 这增加了挫败感。这是因为线程 sleep 利用固定的等待时间,如果元素没有及时附加,它将无法通过测试。 singe31给出了有效的解决方案。另一种解决方案是使用 FluentWait:

public void fluentWait(final By by)
{
    FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver)
               .withTimeout(60, TimeUnit.SECONDS)
               .pollingEvery(5, TimeUnit.SECONDS)
               .ignoring(NoSuchElementException.class);

           WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
             public WebElement apply(WebDriver driver) {
               return driver.findElement(by);
             }
           });
}

这里,Selenium Webdriver 将等待至少 60 秒来查找元素,直到抛出 TimeOutException。否则,它将每 5 秒轮询 DOM 以查找该元素,如果未找到该元素,“NoSuchElementException”异常将被忽略。

您必然要面对的另一个问题是 StaleStateReference 或 NoSuchElementException。您可以查看this link来解决这个问题。

希望有帮助。

关于java - Selenium 测试: Programming a more robust test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24634817/

相关文章:

java - JButtons 不会显示?

java - Netbeans 的 Ant 自动化

'float' 类型的 Python Selenium send_key 对象没有 len()

java - 当scrollIntoView文本对象通过变量传递时,如何使用Appium中的UiScrollable函数?

java - 在我的 route 获取要处理的条目的正确方法是什么

java - 我有一个相当于 Objective-C stringWithUTF8String :? 的 Java

JavaFX 动画恢复到原始状态

java - 失败后继续执行然后如果至少有一个失败则整个测试失败

python - 当父级位于隐式命名空间中时,BeautifulSoup 会删除子级

java - 使用 Selenium 设置自动化测试框架