前段时间项目需要,用selenum做自动化测试,笔者自大的用记事本(...装X...)搞了段自动化代码,跟同事说放心使用,凡事无忧~~,那是自信满满!嗯呢~

然而结果却是被 “啪啪打脸”,啊哈 ,一眼难尽,果然是人不能太狂啊......

其中主要的错误就是定位方式的写法,现在的新版本已经更新了,对定位方式作了调整,但是笔者还是按照之前的方式去写,显然,运行后那是“一片飘红,万里无绿”,刺激啊~~~

后来查询了下资料,才知道错误的原因,所以,遇到问题,一定不要以为就是问题!因为还有可能是别人的问题!!!

........

下面的内容,随意即可,无须太关注,能写出来的AI都能总结,懂的都懂!

........

_____________________________________________________________________________

Selenium 4.44.0 (笔者当时项目中使用的版本)作为 Selenium 4 大版本的迭代版本,‌定位方式确实存在两处核心变更‌,同时在原有基础上新增了定位能力,具体说明如下:

一、核心API变更:废弃旧定位语法
在 Selenium 4 全版本(包括4.44.0)中,对定位方法的API进行了标准化重构:

移除/废弃旧方法‌:所有形如 find_element_by_*(如find_element_by_id、find_element_by_name等)的快捷定位方法已被正式废弃,虽然部分场景仍可运行,但会触发DeprecationWarning过时警告。
统一新语法‌:所有定位统一使用find_element()(单元素定位)和find_elements()(多元素定位),必须配合By类指定定位策略,格式为find_element(By.定位策略, "定位值")。
示例:


# python
# 旧写法(不推荐)
driver.find_element_by_id("kw")
# 新写法(推荐)
from selenium.webdriver.common.by import By
driver.find_element(By.ID, "kw")


二、Selenium 4.44.0 支持的全部定位方式
包含原有的经典定位方式,以及新增的相对定位

1、经典8种定位方式
依旧全部支持,统一通过By类调用,具体如下:


ID定位  -->  By.ID     -->  根据元素id属性定位,效率最高
name定位  -->  By.NAME -->   根据元素name属性定位
class名称定位  -->  By.CLASS_NAME  -->  根据元素class属性定位
标签名定位  --> By.TAG_NAME  -->  根据HTML标签名称定位
完整链接文本定位  -->  By.LINK_TEXT  -->  根据链接的完整文本定位
部分链接文本定位   --> By.PARTIAL_LINK_TEXT  -->  根据链接的部分文本模糊定位
CSS选择器  -->  By.CSS_SELECTOR -->  通过CSS选择器规则定位,灵活性强
XPath定位   --> By.XPATH  -->  通过XPath路径定位,支持复杂场景‌


2、新增:相对定位(Relative Locators)


Selenium 4 新增了‌相对定位‌能力,属于定位方式的新增扩展,允许通过元素之间的空间位置定位目标元素,语法更直观,降低了维护成本:

支持5种空间关系:

above(目标在锚点元素上方)、

below(目标在锚点元素下方)、

toLeftOf(目标在锚点元素左侧)、

toRightOf(目标在锚点元素右侧)、

near(目标在锚点元素附近)


示例(定位密码框上方的用户名输入框):

# 代码不全,仅作展示

from selenium.webdriver.support.relative_locator import with_tag_name
password = driver.find_element(By.ID, "password-field")
username = driver.find_element(with_tag_name("input").above(password))


3、总结

Selenium 4.44.0 没有对定位能力做减法,核心改变只是统一了API写法,同时新增了相对定位提升定位灵活性,原有的定位策略逻辑没有变化,仅需要调整语法格式即可迁移。

——————————————————————————————————————————

声明:以上内容,部分来自AI总结,仅供参考

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐