【问题标题】:Getting Firefox to wait for new page to load after clicking a link in Selenium?单击 Selenium 中的链接后,让 Firefox 等待新页面加载?
【发布时间】:2017-07-10 18:45:16
【问题描述】:

我刚开始使用 Selenium,并使用 Chrome 编写了一堆测试。然后我尝试使用 Firefox 运行相同的测试,但大多数都失败了。

我有一堆有点像这样的测试:

1. Find link
2. Click link
3. Confirm the title of the new page matches what I expect

这在 Chrome 中运行良好,但在 Firefox 中,第 3 步似乎在浏览器有时间加载页面之前立即执行。如果我增加几秒钟的等待时间,所有测试都会通过,但我宁愿避免这样做。

这是一个配置问题,还是有更好的方法来编写测试以帮助提高兼容性?

这些是在 Chrome 中有效但在 Firefox 中失败的测试的基础知识

link = driver.find_element_by_link_text(link_text)
link.click()
# Check if `driver.title` contains `title`
assert title in driver.title

在点击后插入time.sleep(2) 确实可以工作。

(我的身份验证测试遇到了同样的错误:填写表单,单击提交,确认用户被转发到正确的页面。在 Chrome 中,这通过了,在 Firefox 中,对登录页面进行了转发检查,因为浏览器仍未完成重定向到新页面。我收到测试失败的报告,一秒钟后浏览器呈现预期的页面。)

【问题讨论】:

    标签: python selenium selenium-chromedriver selenium-firefoxdriver


    【解决方案1】:

    你可以申请以下:

    from selenium.webdriver.support.ui import WebDriverWait as wait
    from selenium.webdriver.support import expected_conditions as EC
    
    current_title = driver.title # get current title
    link = driver.find_element_by_link_text(link_text)
    link.click()
    wait(driver, 10).until(lambda driver: driver.title != current_title) # wait for title to be different than current one
    assert title in driver.title
    

    【讨论】:

    • 欢迎。你实际上可以删除from selenium.webdriver.support import expected_conditions as EC,因为我使用lambda函数而不是Expected Conditions,所以这个导入被错误地添加了
    猜你喜欢
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2017-10-19
    相关资源
    最近更新 更多