java - Selenium waitForPageToLoad 中的竞争条件?

标签 java selenium timeout

我们使用 Selenium 对基于 Java Spring MVC 的网站进行冒烟测试。我们使用 JUnit 和 Java Selenium 客户端调用它。大多数时候,我们的测试工作正常,但我们往往会在 selenium.waitForPageToLoad 中出现明显随机位置的超时。 (即多次运行测试套件,超时的位置和次数会有很大差异。)

在前台使用服务器运行它,我可以看到正在执行的测试。当这些超时之一发生时,等待之前的 selenium.click 已经发生,但等待似乎没有注意到。右键单击页面并选择“刷新”似乎可以清除阻塞。

对我来说,这表明在点击和 waitForPageToLoad 之间发生了争用情况。其他人有与 waitForPageToLoad 相关的问题,但似乎没有描述竞争条件。有些人提出前面的 selenium.click 调用存在问题,但我在这里没有看到。还有其他人看到我观察到的吗?

我看到过许多不使用 waitForPageToLoad 的建议,但变通方法通常建议使用 waitForElementPresent 或手动轮询元素是否存在。对于我们的应用程序,这似乎需要使用仅供测试使用的 ID 来检测 HTML。此方法是否有非侵入式解决方法?

最佳答案

Selenium 的waitForPageToLoad() 函数非常可靠——我不知道为什么有人会建议您不要使用它。它在 Firefox 中工作得特别好,Selenium RC 添加了一个插件来帮助它检测页面就绪状态,但它在 Internet Explorer 中也工作得很好。我们在我们的测试套件中使用它数千次,它从未失败。

您应该问的问题是“为什么我的页面等待超时?”这个问题最好通过捕获测试中涉及的网络流量并在测试失败时分析结果来回答。如果您有可重复的测试用例,WireShark 或 Fiddler 是很好的工具。如果没有,您可能会在异常处理程序中使用 Selenium RC 的 captureNetworkTraffic() 方法来保存失败时的流量。

关于java - Selenium waitForPageToLoad 中的竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3188413/

相关文章:

java - 如何以异步方式调用 RESTful Web 服务?

java - 基于预定义代码构建的 Netbeans GUI

python - 节点出现故障时如何从 Selenium 集线器获取诊断信息?

selenium - 使用页面对象模式执行操作的多种方式

java - eclipse 超时

c# - "Indefinite"是否有定义的 TimeSpan 值?

NGINX:从上游读取响应 header 时上游超时(110:连接超时)

java - 解释: How does Java work as a web application?

java - JPA如何使用级联删除删除作为onetoone目标的实体

javascript - Selenium - 如果下拉值已经存在,如何检查和增加下拉值?