当前位置: 首页 > news >正文

第四篇:《元素定位大法:从ID到XPath,写出健壮的定位表达式》

UI自动化最头疼的问题之一:明明人眼看到了元素,脚本就是报NoSuchElementException。本文将系统讲解Selenium支持的8种定位方式,深入剖析CSS选择器和XPath的优劣,并给出最佳实践——让你写出稳定、易维护的定位表达式。

一、定位的本质

Selenium通过浏览器的开发者工具找到DOM树中的某个节点,然后模拟用户操作(点击、输入等)。定位器的稳定性直接决定脚本的健壮性。

八大定位方式(Selenium 4 使用By类):

二、最优先:ID、Name、ClassName

2.1 ID —— 理论上唯一且稳定
HTML规范中id属性应唯一,因此定位最快最可靠。

html

<inputtype="text"id="username"name="user"class="form-control">

java

driver.findElement(By.id("username"));

最佳实践:与开发约定,为关键元素添加data-testid或id。

2.2 Name —— 表单元素常用
java

driver.findElement(By.name("user"));

注意:同一页面可能存在多个相同name(如radio按钮组),此时需要结合索引。

2.3 ClassName —— 适合样式定位,但注意复合类名
html

<buttonclass="btn btn-primary submit-btn">登录</button>

错误用法:

java

driver.findElement(By.className("btn btn-primary"));// 会报错

正确用法(使用CSS选择器):

java
driver.findElement(By.cssSelector(“.btn.btn-primary”));
三、链接文本定位(专门用于标签)
html

<ahref="/login">立即登录</a><ahref="/register">免费注册</a>

java

driver.findElement(By.linkText("立即登录"));driver.findElement(By.partialLinkText("登录"));// 模糊匹配

四、CSS选择器 —— 强大而简洁

CSS选择器是Web开发的基础,语法简洁,速度优于XPath。

4.1 常用CSS语法

4.2 实战示例
目标:定位一个动态生成的输入框,没有id,但有data-testid=“search-input”。

java

driver.findElement(By.cssSelector("[data-testid='search-input']"));

目标:表格中第三行的“编辑”按钮。

java

driver.findElement(By.cssSelector("table tbody tr:nth-child(3) .edit-btn"));

五、XPath —— 万能的最后武器

XPath可以通过文本内容、包含关系、轴定位等复杂条件,几乎能定位任何元素。但缺点是语法冗长,执行较慢。

5.1 XPath基本语法

5.2 常用XPath模式
通过文本定位(最常用)

xpath
//button[text()=‘登录’]
//span[contains(text(),‘欢迎’)]
通过属性组合

xpath
//input[@id=‘username’ and @type=‘text’]
模糊匹配

xpath
//div[contains(@class, ‘message’)]
//a[starts-with(@href, ‘/product/’)]
轴定位(处理复杂父子兄弟关系)

xpath
//label[text()=‘用户名’]/following-sibling::input # 同级的下一个input
//div[@id=‘table’]//tr[2]/preceding-sibling::tr[1] # 前一行的tr
5.3 实战:定位动态表格中的特定行
HTML片段:

html

<table><tr><td>张三</td><td><button>编辑</button></td></tr><tr><td>李四</td><td><button>编辑</button></td></tr></table>

定位“李四”对应的编辑按钮:

xpath
//tr[td[text()=‘李四’]]/td/button

六、CSS vs XPath:如何选择?

最佳实践:

优先使用id → 其次CSS → 最后XPath

当需要通过元素文本或向上遍历时,使用XPath

避免使用绝对路径(如/html/body/div[3]/form/input)

七、写出健壮定位的六大原则

与开发约定测试专用属性:如data-testid=“login-btn”,这是最稳定的方案。

优先使用相对路径://div[@id=‘container’]//button 优于 /html/body/div[3]/button。

避免依赖动态属性:如class=“btn-12345”(数字动态变化),应改用其他属性或contains()。

组合多个属性:提高唯一性,如input[@name=‘phone’ and @placeholder=‘手机号’]。

不要使用索引除非绝对必要://div[2]//span[3] 极易因页面结构微调而失效。

使用浏览器工具验证:在Chrome DevTools的Elements面板按Ctrl+F,输入XPath/CSS,确认能唯一匹配。

八、代码示例:多种定位实战

假设目标页面有以下元素:

html

<divid="loginPanel"><inputtype="text"id="username"placeholder="请输入用户名"><inputtype="password"id="password"placeholder="请输入密码"><buttonclass="btn login-btn">登录</button></div>

不同定位方式对比:

九、常见定位失败原因与排查

十、总结

核心要点:

八大定位方式各有适用场景,优先用id/name/CSS。

XPath强在文本和轴定位,但不要滥用。

稳定性的关键是与开发约定测试专用属性。

http://www.jsqmd.com/news/682130/

相关文章:

  • 告别迷茫!Air780E开发板CSDK环境搭建保姆级教程(从Git到烧录)
  • 市场解析:在线浊度仪源头厂家,哪些品牌与厂家引领潮流? - 品牌推荐大师
  • 3个理由告诉你为什么Easy-Scraper是网页数据提取的最佳选择
  • BilibiliDown音频提取终极指南:3分钟学会B站音频批量下载
  • OpenMV IDE 3分钟安装指南:从零开始运行视觉项目的完整教程
  • 【立体视觉(五)】之SGM算法:从代价聚合到视差优化的实战解析
  • XXL-Job 2.4.0版,如何用PageHelper插件搞定达梦、Oracle等数据库的分页难题?
  • XMOS爱斯摩斯产品特点以及应用领域有哪些方案应用?
  • PyCharm社区版2024.x在Ubuntu 22.04上的安装避坑指南:从下载、解压到解决‘找不到Java’错误
  • 合肥豪杰汽车服务:合肥旅游租车哪家好 - LYL仔仔
  • 从浪潮服务器到VMware虚拟机:一份通用的Ubuntu 20.04静态IP配置清单(含多网卡、多IP场景)
  • agno v2.5.17 更新:文件引用可关闭、GitHub 配置支持按请求指定、流式与组件加载全面修复,稳定性再升级
  • 如何快速掌握原神角色培养:胡桃工具箱完整使用指南
  • 从用户痛点到技术突破:网盘直链解析工具的全新进化之路
  • 用PyTorch复现FCN语义分割:从VGG16预训练到FCN-8s实战,附完整代码与避坑指南
  • 实测对比:ORB_SLAM3在Jetson AGX Xavier上的帧率提升真有59%吗?
  • 保姆级教程:在浪潮F37X加速卡上,用Vivado 2023.1和XDMA IP核搭建PCIe DMA测试环境(含完整脚本)
  • 别再只盯着YOLO了!聊聊Siam-NestedUNet:这个融合了UNet++和注意力机制的网络如何解决“漏检”难题
  • 保姆级教程:用Unlocker 4.2.4在VMware Workstation 17上轻松解锁MacOS虚拟机选项
  • 无锡兆材包装:江阴比较好的二手拖盘回收公司推荐几家 - LYL仔仔
  • 4月22日成都地区马钢产H型钢(1998-Q235B;100-1000mm)现货厂家 - 四川盛世钢联营销中心
  • 手机变身系统急救神器:当电脑崩溃时,用EtchDroid拯救你的操作系统
  • JPEXS Free Flash Decompiler:SWF资源提取与反编译的终极免费工具
  • 国家中小学智慧教育平台电子课本下载神器:3分钟搞定全套教材PDF
  • 告别USB线!给Ender-3 V2装上Klipper后,我是这样用Fluidd网页远程操控打印的
  • IDEA: 打造个性化编程环境的主题、字体与插件实战指南
  • 别再乱搜了!程序员必备的Unicode编码查询手册(附在线工具推荐)
  • 雄县邦讯商贸:大兴枕头回收推荐几家 - LYL仔仔
  • 别再乱打光了!Blender 3.6 灯光保姆级教程:从环境光到IES,一次讲透
  • 南京岩洲建设:南京微型挖机出租价格多少 - LYL仔仔