You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium中如何为测试定位器添加自定义HTML属性

Selenium中使用自定义HTML属性编写测试定位器的方法

自定义HTML属性(包括测试场景常用的data-tb-test-id、data-testid类属性)不需要修改Selenium底层配置,直接通过内置的定位策略即可完成元素匹配,具体实现方式如下:

1. CSS选择器定位(推荐,匹配性能最优)

CSS选择器是自定义属性定位的首选方案,支持全场景属性匹配规则,示例代码(Python版本):

  • 匹配存在指定自定义属性的所有元素,不校验属性值:
from selenium.webdriver.common.by import By

# 提取所有带data-tb-test-id属性的页面元素
test_elements = driver.find_elements(By.CSS_SELECTOR, "[data-tb-test-id]")
  • 匹配自定义属性值完全等于目标值的元素:
# 定位data-tb-test-id值为"login-submit-btn"的提交按钮
submit_btn = driver.find_element(By.CSS_SELECTOR, "[data-tb-test-id='login-submit-btn']")

CSS选择器还支持灵活的模糊匹配规则:

  • 前缀匹配:[data-tb-test-id^='login-'] 匹配所有属性值以login-开头的元素
  • 后缀匹配:[data-tb-test-id$='-input'] 匹配所有属性值以-input结尾的元素
  • 包含匹配:[data-tb-test-id*='user'] 匹配所有属性值中包含user字符串的元素

2. XPath定位(适配复杂匹配逻辑)

如果需要实现多属性组合、父子节点关联等更复杂的定位逻辑,可以使用XPath方案,示例代码:

# 匹配所有存在data-tb-test-id属性的元素
all_test_nodes = driver.find_elements(By.XPATH, "//*[@data-tb-test-id]")

# 定位data-tb-test-id值为"username"的输入框元素
username_input = driver.find_element(By.XPATH, "//input[@data-tb-test-id='username']")

# 模糊匹配data-tb-test-id属性值包含"submit"的所有元素
submit_nodes = driver.find_elements(By.XPATH, "//*[contains(@data-tb-test-id, 'submit')]")

实践注意事项

  • 测试专用自定义属性建议统一使用data-前缀命名,符合HTML规范的同时,不会和业务原生属性产生命名冲突
  • 自定义属性值尽量保证页面内全局唯一,定位时不需要依赖父级、兄弟节点的层级关系,可大幅降低前端页面结构调整带来的定位失效概率
  • 简单属性匹配优先使用CSS选择器,执行效率比XPath高30%左右;仅在需要复杂逻辑判断时使用XPath即可

内容的提问来源于stack exchange,提问作者tirath singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 04:15:42