1

环境:Chrome v29、selenium driver 2.35、chromedriver 2.2

在几个测试中,用 Behat w/ Selenium 驱动编写,页面上的所有可见元素都已加载,并且 Speed Tracer 显示没有挂起的请求,但有时浏览器状态栏显示“正在连接”,而 selenium 似乎卡在等待该连接完成(它永远不会)。其他时候,完全相同的页面会立即加载并立即处理。

如果你让测试坐下来,最终事情会超时,而且不会再继续了。如果您在浏览器中手动单击“停止”,则 selenium 将再次开始工作,并且测试完成而没有其他问题。

理想情况下,我很想弄清楚为什么这些页面会这样挂起,但我也很乐意解决它,某种“给这个页面 10 秒,然后认为它已经完成”。

4

3 回答 3

0

正如 Arran 所建议的,最好找出页面加载时间较长的原因。但作为一种变通方法,您可以使用 JSExecutor 来执行页面导航的点击操作。如果主登录页面也需要时间来加载,它仍然会给您带来问题。

于 2013-08-22T07:16:23.210 回答
0

根据我的经验,在导致页面加载的任何交互之后,Selenium 在页面完全加载之前不会返回控制权

于 2013-08-22T10:05:18.857 回答
0

我们在 watir-webdriver 中遇到了类似的问题。因为 .click 之类的 API,watir 中的 .goto 做了两件事。它点击一个元素并等待页面加载(document.readyState == "complete"),如果页面在 HTTP_TIMEOUT 定义的特定持续时间内未加载,则超时。如果你的页面依赖很多服务,尤其是在测试环境中,如果至少有一个服务响应缓慢,即使页面加载了 99%,click api 也会超时。

我们的解决方案是在 Watir Element 类下创建一个说 click_no_timeout 的 api,它与 click api 完全相同,除了它将挽救超时并且什么都不做。

由项目代码来处理超时,以防它真的是一个有效的超时。我认为您也可以对硒采用相同的方法。

于 2013-09-27T15:39:31.647 回答