Python 通过函数查找元素总是反映DOM顺序吗?

Python 通过函数查找元素总是反映DOM顺序吗?,python,selenium,webdriver,selenium-webdriver,Python,Selenium,Webdriver,Selenium Webdriver,执行类似于browser.find\u elements\u by\u css\u selector('input[type=text]”)的调用。总是按照反映DOM的顺序返回WebElement对象吗 我问这个问题是因为我有一个类似于待办事项列表的应用程序,表单元素在页面上的显示顺序(动态添加)非常重要,也许我是在分析,但我正在测试这个行为,作为测试套件的一部分 注意:我可能会在各种浏览器中运行测试 我的测试(Python withunittest): 根据我的经验,这是正确的,这也是有意义的

执行类似于
browser.find\u elements\u by\u css\u selector('input[type=text]”)的调用。
总是按照反映DOM的顺序返回
WebElement
对象吗

我问这个问题是因为我有一个类似于待办事项列表的应用程序,表单元素在页面上的显示顺序(动态添加)非常重要,也许我是在分析,但我正在测试这个行为,作为测试套件的一部分

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

我的测试(Python with
unittest
):


根据我的经验,这是正确的,这也是有意义的,因为FindElements方法将解析文档,根据定位器查找匹配项


此外,即使它们不完全符合DOM顺序,每次都是一致的,因此您应该可以安全地编写相应的测试


但是,请记住,任何时候在多个匹配项上使用顺序,如果添加或删除输入,那么顺序可能会改变,并且您需要相应地更新测试。

有趣的是,我只见过返回的元素顺序与其DOM位置相匹配。否则,当我创建一个元素列表并指定
list[0]
时,我真的很幸运,它一次又一次地获取相同的元素。“即使它们不完全符合DOM顺序,每次都是一致的”-浏览器之间是否一致?根据我的经验,是的。用于定位元素的WebDriver javascript原子对于每个驱动程序实现应该是相同的,这意味着它应该是一致的。
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)