Do find_elements_by_*函数始终反映DOM顺序



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

我之所以这么问,是因为我有一个类似待办事项列表的应用程序,表单元素在页面上的显示顺序(动态添加)至关重要,也许我很挑剔,但我正在将这种行为作为测试套件的一部分进行测试。

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

我的测试(带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)

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

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

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

最新更新