【问题标题】:Why does the Selenium-Python WebDriverWait not work as documented?为什么 Selenium-Python WebDriverWait 不能按文档说明工作?
【发布时间】:2019-02-22 10:08:44
【问题描述】:

我有一个非常复杂的 py.test 脚本,它使用 selenium 来测试非公开网页。在该测试脚本中,我有以下代码:

wait = WebDriverWait(driver, 1)
result = wait.until(EC.element_to_be_clickable(('xpath', "//span[contains(text(), 'Start simulation')]/..")))

根据documentation(或here),我希望这段代码“等待”最多1 秒。但是,它卡在那里大约 256 秒!

这是为什么呢?怎么会这样?

版本信息: - pytest==3.6.1 - selenium==3.14.1

【问题讨论】:

标签: python selenium


【解决方案1】:

请检查您的代码中是否有隐式等待。最好不要混合 implicitexplicit 等待。一个已知问题是,如果您在其他地方有隐式等待,这可能会影响显式等待时间。

https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/2948

【讨论】:

  • 在这行代码中,100% 确定等待是绝对确定的:result = wait.until(EC.element_to_be_clickable(('xpath', "//span[contains(text(), 'Start simulation')]/..")))
  • @Alex 你不知道......仅仅因为它失败在那里,并不意味着它不是由于与隐式等待的不良交互。你有一个隐式等待集吗?文档明确声明不要将两者混为一谈。
【解决方案2】:

WebDriverWait 仅在页面加载后开始等待(浏览器返回document.readyState == 'complete')。如果页面加载需要 256 秒,那么 WebDriverWait 甚至还没有开始。

【讨论】:

    【解决方案3】:

    只是检查如果你尝试而不是这个。

    wait = WebDriverWait(driver, 1)
    result = wait.until(EC.element_to_be_clickable(('xpath', "//span[contains(text(), 'Start simulation')]/..")))
    

    试试这个有什么不同。

    wait = WebDriverWait(driver, 1)
        result = wait.until(EC.element_to_be_clickable((By.XPATH, "//span[contains(text(), 'Start simulation')]/..")))
    

    【讨论】:

    • 与以前的行为相同。现在只需等待 60 秒。
    • 你能分享你正在尝试的脚本的html部分吗?
    • 好问题。我不能。整个浏览器没有响应。我无法打开开发者控制台。有趣...
    • 事实证明,这似乎是我尝试加载的页面的问题。它基本上阻止了一切,包括硒。所以你关于页面内容的问题给我带来了正确的方向。
    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 2015-10-21
    • 2014-02-15
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    相关资源
    最近更新 更多