2013-11-25 100 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