2013-11-25 66 views
2

实质上,我有一种情况,当用户输入HTML文本输入时,一个元素会动态添加到页面中。添加元素不涉及网络活动。我需要明确的等待吗?

我想运行我的测试 - 包括检查此行为 - 尽可能广泛地使用各种浏览器,并使用云服务。 saucelabs.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) 

这是我的本地机器上,工作可靠,但是从我可以看到它假定浏览器总是会完成DOM操作之前的Python/webdriver的获取到find_elements_by_通话。我是否认为这是一个危险的假设?

如果是这样,我需要一个明确的等待吗?也许是这样的:

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在这里不相关)。

回答

1

是的,你是正确的做出这样的假设。

在我理解你所声称的明确等待的具体条件是必需的。对于更常用的其他场景,您可以使用“预期条件”。

更多here

2

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

+0

+1我不知道有使用这两个 – KnewB

+0

危险我发布了一个[相关问题](http://stackoverflow.com/questions/20268396/mixing-implicit-and-explicit-waits) – KnewB