【问题标题】:Selenium, click on element, hangs硒,点击元素,挂起
【发布时间】:2012-05-07 17:13:58
【问题描述】:

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

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

【问题讨论】:

    标签: java selenium webdriver


    【解决方案1】:

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

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

    试试driver.manage().timeouts().pageLoadTimeout(),这是 2.21.0 中的一个新方法,应该可以解决这个问题。

    【讨论】:

    • 这适用于 firefoxdriver 但不适用于 chrome 驱动程序。大多数网站都能正常工作,但有些网站需要 10 秒才能抛出异常,即使超时为 2 秒,这仍然比等待 2 分钟要好。
    • 我猜。对于 Chrome 驱动程序(以及 IEdriver),我们只需要再等一会儿,这是一种全新的方法,并没有比 FF 更进一步。您知道,Selenium 2 仍在大规模开发中。
    • 这使它始终工作:FirefoxProfile fp = new FirefoxProfile(); fp.setPreference("webdriver.load.strategy", "不稳定");驱动程序 = 新的 FirefoxDriver(fp); driver.manage().timeouts().pageLoadTimeout(4, TimeUnit.SECONDS);
    • 我遇到了这个问题,我使用 Selenium 2.39 和 Firefox 26 尝试了你的理论,但它并没有解决问题,Chrome 31 也没有。
    【解决方案2】:

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

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

    element.SendKeys(Keys.Enter);

    相反。你得到一个特别的二合一 - 它不会阻止并且你正在测试可访问性,因为许多受损用户只使用键盘进行导航。

    【讨论】:

    • 或使用 1 的 4 东西。 Fluent Wait、pageLoadTimeOuts、隐式等待或可运行/Future(如果在 Scala 中)。这取决于大小写。
    【解决方案3】:

    当 selenium 挂起时,将您的 Firefox 版本更新为与 selenium 一样更新

    【讨论】:

      猜你喜欢
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 2016-07-08
      • 2019-05-30
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      相关资源
      最近更新 更多