2013-11-20 4 views
5

browser.find_elements_by_css_selector('input[type=text]')のようなコールは、DOMを反映する順序で常にWebElementのオブジェクトを返しますか?find_elements_by_ *関数は常にDOMの順序を反映しますか?

私はリストに似たアプリケーションがあり、フォーム要素がページに表示される順序(動的に追加される)が重要であり、おそらく私は肛門性器ですが、この行動を部分的にテストしているからです私のテストスイートの

N.B:さまざまなブラウザでテストを実行する可能性があります。

私のテスト(unittestとPythonの):私の経験で

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

関連する問題