2013-11-20 6 views
5

Czy wywołanie takie jak browser.find_elements_by_css_selector('input[type=text]') zawsze zwraca obiekty WebElement w kolejności odzwierciedlającej DOM?Czy find_elements_by_ * funkcje zawsze odzwierciedlają kolejność DOM?

Pytam, ponieważ mam aplikację podobną do listy, a kolejność elementów formularza na stronie (dodana dynamicznie) jest niezbędna i być może jestem analna, ale testuję to zachowanie jako część z mojego zestawu testów.

N.B .: Prawdopodobnie przeprowadzę test w różnych przeglądarkach.

Mój testowy (Python z 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

Anegdotycznie widziałem, że zwrócone elementy były zgodne z pozycją DOM. W przeciwnym razie, gdy robię listę elementów i określam 'list [0]' po prostu NAPRAWDĘ mam szczęście, że pobiera ten sam element za każdym razem. –

Odpowiedz

1

Z mojego doświadczenia jest to prawdą, co również ma sens, w jakim FindElements metody będziemy analizować dokument szuka meczów na podstawie lokalizatora.

Co więcej, nawet jeśli nie są one dokładnie w zamówieniu DOM, będzie on konsekwentny za każdym razem, więc powinieneś być bezpieczny i odpowiednio napisać test.

Należy jednak pamiętać, że za każdym razem, gdy użyjesz zamówienia na wielu dopasowaniach, jeśli dodasz lub usuniesz dane wejściowe, zamówienie prawdopodobnie ulegnie zmianie i musisz odpowiednio zaktualizować test.

+0

"nawet jeśli nie są dokładnie w porządku DOM, będzie konsekwentnie za każdym razem" - czy będzie spójny między przeglądarkami? – KnewB

+0

Z mojego doświadczenia wynika, że ​​tak. Atrybuty javascript serwera WebDriver używane do lokalizowania elementów powinny być takie same dla każdej implementacji sterownika, co oznacza, że ​​powinny być spójne. – PocketDews