gpt4 book ai didi

java - Selenium 测试: Programming a more robust test

转载 作者:行者123 更新时间:2023-12-02 05:39:27 26 4
gpt4 key购买 nike

我正在尝试使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com