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

Kne*_*ewB 5 python selenium webdriver selenium-webdriver

是否browser.find_elements_by_css_selector('input[type=text]')总是WebElement按照反映DOM的顺序返回对象?

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

注意:我可能会在各种浏览器中运行测试.

我的测试(Python with 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)
Run Code Online (Sandbox Code Playgroud)

Poc*_*ews 1

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

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

但是,请记住,每当您在多个匹配中使用顺序时,如果添加或删除输入,则该顺序可能会发生变化,并且您需要相应地更新测试。