【问题标题】:How to wait only DOM to load with Selenium (without images)如何仅等待 DOM 加载 Selenium(无图像)
【发布时间】:2011-10-24 19:56:04
【问题描述】:

页面上有很长的图片列表。应用程序中有一个 AJAX“加载更多图像”按钮(位于页面底部),当用户向下滚动页面时会自动激活该按钮。 我想用 Selenium 将页面滚动到最后,并确保页面底部没有“加载更多图像”按钮。 脚本(可能有更优雅的解决方案,但这不是重点)

browser.execute_script("""
            setInterval(function() {
                window.scrollBy(0,50000);
            }, 1000);
           ;""")
invisibleShowMoreCounter = 0;
while True:
        if "" ==  browser.find_element_by_id("show_more").text:
            invisibleShowMoreCounter = invisibleShowMoreCounter + 1
            if (invisibleShowMoreCounter  > 3): break
        time.sleep(1)

它将页面滚动到底部,然后检查 3 秒内是否没有“show_more”元素(虽然不确定是否需要这个循环)。 所以事情是它成功地向下滚动页面但在此之后,它停留在 browser.find_element_by_id("show_more") 直到页面完全加载(包括图像),这需要很多时间。所以 DOM 就在那里,但是因为有很多图像,所以加载所有图像大约需要几分钟。 我不是 100% 确定这是因为页面没有完全加载,但它看起来很可能(所以它进入循环的第一次迭代,然后在 find_element_by_id 上停留几分钟,然后更进一步并成功完成。 问题是是否可以命令 find* 方法不等待所有图像完成下载,这样测试就不会花几分钟通过?

设置browser.implicitly_wait(1)(似乎与此相关)似乎没有帮助。

【问题讨论】:

    标签: python selenium webdriver qa


    【解决方案1】:

    您可以等待浏览器/文档状态变为交互状态。那就是等待js条件

    document.readyState='interactive'
    

    【讨论】:

    • 我不确定这是否与 Selenium(使用 WebDriver)上下文相关。这似乎只是 JS 检查,问题是 Selenium 命令正在等待页面完全加载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 2012-11-05
    • 1970-01-01
    • 2017-07-19
    • 2018-05-07
    相关资源
    最近更新 更多