Selenium,点击元素,挂起

Sam*_*msh 8 java selenium webdriver

这是关于 java 中的 selenium webdriver。如果单击一个元素,通常它会很快,但有时当服务器繁忙时,它会在浏览器顶部显示 Connecting... 并挂起。通常处理等待,代码是:driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS); 但在这种情况下,当服务器挂在 click() 上时,这不会在时间限制后抛出异常,因为 webdriver 在点击完成连接到下一个网址。以前有没有人处理过这个问题,如何处理?

有没有办法计时完成click()submit()

Kev*_*ell 5

Selenium 文档指出 Click() 会阻塞。如果出于任何原因,Selenium 认为页面未完全加载,那么您的 Click 将挂起您的测试。

我发现最简单的解决方法是完全跳过点击事件并使用:

element.SendKeys(Keys.Enter);

反而。您会得到二合一的特别优惠 - 它不会阻塞,并且您正在测试可访问性,因为许多受损用户无论如何都只使用键盘进行导航。

  • 或者使用 4 种东西中的一种。Fluent Wait、pageLoadTimeOuts、隐式等待或 Runnable/Future(如果在 Scala 中)。这非常取决于具体情况。 (2认同)

Pet*_*ček 4

是的,这是一个已知问题,从 Selenium 2.21.0 开始,有一种方法可以解决。

问题在于,隐式等待旨在在搜索某些元素时等待已卸载的元素,但该click()方法只是等待,直到浏览器声明页面已完全加载。

尝试一下driver.manage().timeouts().pageLoadTimeout()这是 2.21.0 中的新方法,应该可以准确地处理这个问题。

  • 我遇到了这个问题,我使用 Selenium 2.39 和 Firefox 26 尝试了你的理论,但它没有解决问题,Chrome 31 也没有解决问题。 (2认同)