【发布时间】: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