前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

UI自动化系列之元素定位-轴定位(自动化元素定位工具)

以下为使用Python Selenium实现XPath定位的代码示例:

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

# ================== 基本定位 ==================
# 1. 标签名定位
driver.find_element("xpath", "//input")

# 2. 标签+单个属性定位
driver.find_element("xpath", "//input[@id='kw']")

# 3. 标签+多个属性组合
driver.find_element("xpath", "//input[@id='kw' and @name='wd']")

# 4. 文本定位
driver.find_element("xpath", "//a[text()='新闻']").click()

# 5. 模糊匹配定位
driver.find_element("xpath", "//a[contains(text(),'新')]")

# ================== 层级定位 ==================
# 层级关系定位
driver.find_element("xpath", "//span[@id='s_kw_wrap']//input")

# ================== 轴定位 ==================
# 1. parent父节点定位
driver.find_element("xpath", "//span[text()='设置']/parent::a")

# 2. ancestor祖先节点
driver.find_element("xpath", "//span[text()='高级搜索']/ancestor::div[@id='wrapper']")

# 3. following后续节点
driver.find_element("xpath", "//div[@id='s-top-left']/following::div[@id='s-top-right']")

# 4. preceding前方节点
driver.find_element("xpath", "//div[@id='s-top-right']/preceding::div[@id='s-top-left']")

# 5. following-sibling后续兄弟节点
driver.find_element("xpath", "//div[@id='s-top-left']/following-sibling::div[1]")

# 6. preceding-sibling前方兄弟节点
driver.find_element("xpath", "//div[@id='s-top-right']/preceding-sibling::div[1]")

# ================== 动态元素处理 ==================
# 处理动态ID
driver.find_element("xpath", "//div[starts-with(@id, 'test_')]")
driver.find_element("xpath", "//div[contains(@id, 'kw')]")

# 处理动态文本
driver.find_element("xpath", "//a[contains(text(), '部分文本')]")

sleep(3)
driver.quit()

关键技巧说明:

  1. 优先使用元素唯一属性:
//input[@id='kw']  # 最推荐方式
//input[@name='wd']
  1. 组合定位策略时:
//input[@id='kw' and @maxlength='255']  # 多个属性组合
//div[@class='menu']//a[contains(text(),'产品')]  # 层级+文本组合
  1. 处理动态元素:
//div[starts-with(@id, 'auto_')]  # ID前缀固定
//span[contains(@class, 'icon')]  # 类名包含特定字符
  1. 表格定位示例:
# 定位"42期"课程的成绩管理
//td[text()='42期']/following-sibling::td[1]//span[text()='成绩管理']
  1. 处理隐藏元素:
//div[not(contains(@style, 'display: none'))]  # 排除隐藏元素
//input[@type='hidden']/following::input[1]  # 定位隐藏元素后的可见元素

定位优先级建议:

  1. 优先使用id/name等唯一属性
  2. 次选text文本定位(需注意国际化问题)
  3. 复杂结构使用轴定位
  4. 慎用绝对路径(易受页面结构调整影响)
  5. 动态内容优先使用contains等函数

当元素定位困难时,可以:

  1. 使用浏览器开发者工具的XPath验证功能(Ctrl+F)
  2. 添加显式等待(WebDriverWait)
  3. 结合CSS Selector进行定位
  4. 通过JavaScript直接操作元素

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言