【问题标题】:Do I need an explicit wait?我需要明确的等待吗?
【发布时间】:2013-11-25 20:28:40
【问题描述】:

本质上,我有这样一种情况,当用户输入 HTML 文本输入时,一个元素会动态添加到页面中。添加元素时不涉及网络活动。

我想在尽可能广泛的浏览器上运行我的测试(包括检查此行为),并将使用云服务,例如酱实验室.com。

我想测试动态添加元素的数量是否正确。到目前为止我的测试:

text_input.send_keys('a') 
#send_keys('a') should make the browser immediately add an li to ul.new-elements
added_elements = browser.find_elements_by_css_selector('ul.new-elements li')
assert(len(added_elements), expected_num_of_list_items)

这在我的本地机器上运行可靠,但据我所见,它假定浏览器将始终在 Python/Webdriver 到达 find_elements_by_ 调用之前完成 DOM 操作。我认为这是一个危险的假设是否正确?

如果是这样,我需要显式等待吗?也许是这样的:

text_input.send_keys('a')
try:
    WebDriverWait(browser, 30).until(
        lambda b: len(b.find_elements_by_css_selector('ul.new-elements li')) == expected_num_of_list_items,
        'Timed out waiting for LI to be added.'
    )
except TimeoutException:
    fail('Timed out waiting for LI to be added.') #2 fail messages?

(我的理解是implicit_wait与这里无关)。

【问题讨论】:

    标签: python selenium webdriver selenium-webdriver


    【解决方案1】:

    你的想法是正确的。一旦开始使用显式等待,就应该忘记隐式等待。 here 很好地解释了为什么不应该混合这两种类型。

    【讨论】:

    【解决方案2】:

    是的,您做出这个假设是正确的。

    根据我的理解,您声明显式等待的具体条件是必需的。对于其他更常用的场景,您可以使用“预期条件”。

    阅读更多here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 2012-04-21
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多