2013-11-20 22 views
5

browser.find_elements_by_css_selector('input[type=text]')這樣的調用是否總是按照反映DOM的順序返回WebElement對象?find_elements_by_ *函數是否總是反映DOM順序?

我問,因爲我有一個待辦事項列表類似的應用程序和表單元素出現在頁面(動態添加)的順序是非常重要的,也許我是肛門,但我測試這種行爲,因爲部分我的測試套件。

N.B:我很可能會在各種瀏覽器中運行測試。

我的測試(Python和unittest):

def test_titles_should_appear_in_the_order_they_are_entered(self): 
    titles = ['title 1', 'title 2', 'title 3'] 
    for title in titles: 
     self._type_new_title(title).send_keys(Keys.RETURN) 
    inputs = self.browser.find_elements_by_css_selector('input[type=text].title') 
    # assumption: inputs will always reflect the DOM order, top to bottom 
    input_vals = [i.get_attribute('value') for i in inputs] 
    self.assertEqual(input_vals, titles) 
+1

據傳說,我只見過返回的元素順序匹配他們的DOM位置。否則,當我製作一個元素列表,並指定'list [0]'我真的很幸運,它會一次又一次地獲取相同的元素。 –

回答

1

在我的經驗,這是真實的,這也有道理,在該FindElements方法去分析尋找基於定位器匹配的文件。

此外,即使他們是在DOM順序不完全,這將是一致的每一次,所以你應該是安全的編寫相應的測試。

但是,請在任何時候你在多場比賽使用的順序,如果您添加或刪除輸入,則該訂單可能會改變主意,你就需要相應地更新測試。

+0

「即使它們不完全在DOM順序中,每次都會一致」 - 瀏覽器之間的瀏覽器是否一致? – KnewB

+0

以我的經驗,是的。用於定位元素的WebDriver JavaScript原子應該與每個驅動程序實現相同,這意味着它應該是一致的。 – PocketDews

相關問題