定位你的定位器 - Python 绑定即将发生变更
更新你的定位器以适应 Selenium 4 中 Python 绑定的变更
分类
在房地产行业,寻找新房子或办公空间的口号是“位置、位置、位置!”。可以说,在使用 Selenium 时,编写测试的一个关键方面是“定位器、定位器、定位器!”。拥有强大的定位器策略(在你的被测应用程序和你的测试框架中)对于有效测试至关重要。
如果你像我一样是 Pythonista 并且使用 Selenium 进行测试自动化,那么定位器的定义和使用方式即将发生一些重要更改。
在 Selenium 4.2 之后的某个时间,Python Selenium 绑定将删除用于查找元素的特定于定位器的方法。这意味着方法
driver.find_element_by_id("some_id")
driver.find_element_by_name("some_name")
driver.find_element_by_tag_name("some_tag")
driver.find_element_by_css_selector("some_selector")
driver.find_element_by_class_name("some_class")
driver.find_element_by_link_text("some_text")
driver.find_element_by_partial_link_text("some_other_text")
driver.find_element_by_xpath("some_xpath")
将被删除。所有这些方法实际上是
driver.find_element(By_object, "some_locator")
的特殊情况,因此现在首选(甚至必须)使用 Python 绑定采用这种方法。
请注意,最好使用 By 对象,它具有使用特定定位器策略的特定值。例如,这一行
driver.find_element_by_id("submit_button").click()
driver.find_element_by_css_selectors('.myelement child').text
变成
driver.find_element(By.ID, "submit_button").click()
driver.find_element(By.CSS_SELECTOR, '.myelement child').text
如果你真的不顾一切,也可以使用字符串而不是 By 对象
driver.find_element('id', "submit_button").click()
driver.find_element('css selector', '.myelement child').text
如果你有任何计划将你的 Python 测试的 Selenium 客户端升级到最近版本的 Selenium 4,一定要记住这些更改。现在是更新你的定位器策略和结构的好时机。
(本文最初发布此处。感谢 Selenium 核心贡献者在此处添加此内容!)