find_elements_by_ *函数是否始终反映DOM顺序?

时间:2013-11-20 14:14:33

标签: python selenium webdriver selenium-webdriver

browser.find_elements_by_css_selector('input[type=text]')这样的调用是否总是以反映DOM的顺序返回WebElement个对象?

我问,因为我有一个类似待办事项列表的应用程序,表单元素出现在页面上的顺序(动态添加)是至关重要的,也许我是肛门但我正在测试这种行为作为我的测试套件。

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 个答案:

答案 0 :(得分:1)

根据我的经验,这也是有道理的,因为FindElements方法将根据定位器解析文档以查找匹配项。

此外,即使它们不完全符合DOM顺序,每次都会保持一致,因此您应该安全地相应地编写测试。

但是,请记住,只要您在多个匹配项上使用订单,如果您添加或删除输入,那么该订单可能会更改,您需要相应地更新测试。