软件测试入门到精通-第10周-ui自动化测试-xpath其他方式定位+xpath练习
·
🤖 XPath魔法手册:让元素定位变得像点外卖一样简单
🔍 XPath定位的"三明治法则"
各位前端测试工程师们好!今天我们要聊的是XPath那些让人又爱又恨的延伸表达式。就像点外卖要选对关键词一样,定位元素也要讲究策略。
🥪 三层定位法(就像完美的三明治)
-
顶层面包:文案定位
//button[text()='立即下单']适合:就像你一眼看到"限时特惠"就会点击一样,直接找看得见的文字
-
中间馅料:属性定位
//input[contains(@placeholder,'输入手机号')]适合:那些藏得很深的输入框,就像外卖App里隐藏的优惠券
-
底层面包:组合定位
//div[@id='header']//a[contains(@href,'checkout')]适合:对付那些调皮的元素,就像在满屏的外卖商家中找到评分4.9的那家
🧩 XPath实战生存指南

场景1:对付"薛定谔的按钮"
# 这个按钮可能叫"提交"、"确认"或者"立即购买"
driver.find_element(By.XPATH, "//button[contains(text(),'提交') or contains(text(),'确认')]")
就像你不知道今天外卖小哥会走哪条路,但你知道他最终会把餐送到你手上
场景2:处理"变形金刚"元素
//input[starts-with(@id,'dynamic_') and contains(@class,'input')]
这类元素的ID每天都在变,就像外卖平台每天换不同的优惠券前缀
场景3:多层菜单的"套娃"挑战
//ul[@role='menu']/li[contains(@class,'level1')]//a[text()='我的订单']
就像要在外卖App里找到"我的->订单->历史订单"这个隐藏很深的入口
💣 XPath避雷指南
雷区1:过度依赖浏览器生成的XPath
❌ //*[@id="root"]/div/div[2]/div[3]/div/div[1]/div/div[2]/button
✅ //button[@aria-label='搜索']
就像你不会用"北京市朝阳区XX街道XX小区3号楼2单元1001室"来点外卖,而是直接搜"麦当劳"
雷区2:忽略大小写和空格
❌ //*[text()='login ']
✅ //*[text()='Login']
就像你输入"mc"找不到"McDonald’s"一样抓狂
雷区3:性能黑洞
❌ //div//span//a
✅ //div[@id='nav']//a[text()='首页']
这就像在外卖平台不输入任何筛选条件直接浏览所有商家
🚀 高阶玩法:XPath的"外卖会员卡"
技巧1:使用轴定位(就像精准配送)
//td[text()='订单号']/following-sibling::td[1]
就像告诉外卖小哥"放在门把手上,不要敲门"
技巧2:组合条件(像凑满减)
//button[contains(@class,'btn-primary') and not(contains(@class,'disabled'))]
就像同时使用"满50减10"和"新用户专享"两个优惠
技巧3:变量化常用定位
checkout_btn = "//button[contains(@class,'checkout')]"
driver.find_element(By.XPATH, checkout_btn)
就像把常点的外卖收藏起来
🎯 行业实例:如何像美食家一样精准定位
电商网站(对付各种促销按钮)
//div[contains(@class,'flash-sale')]//button[text()='立即抢购']
社交平台(抓取动态内容)
//div[@role='feed']//article[contains(@aria-label,'发了新动态')]
SaaS后台(处理复杂表格)
//table[@id='user-table']//tr[.//td[text()='VIP用户']]//button[text()='续费']
💡 终极建议:XPath就像点外卖
- 越具体越好:就像你不会只输入"饭"来找外卖
- 注意效率:避免让浏览器"翻遍整个菜单"
- 保持灵活:准备备选方案,就像你常点的店可能打烊了
记住,好的XPath就像成功的外卖订单——精准、高效、不让人失望!现在,是时候让你的元素定位像五星好评的外卖体验一样流畅了! 🚀

《XPath定位完全攻略:从入门到"不迷路"》技术手册
一、XPath定位的"十八般武艺"
1. 文字猎人模式
- 使用场景:当你想抓住那些"会说话"的按钮和链接时
- 核心咒语:
//标签名[text()='你要找的字'] - 实战演练:抓捕"登录"按钮
//a[text()='登录'] # 这样比用*更精确哦 - 避坑指南:
- 别用半吊子匹配,要抓就抓完整文本
- 注意:XPath是个强迫症,大小写和空格都要对
2. 属性侦探技巧
- 优先级排序:ID是VIP > name是普通会员 > class是路人甲
- 经典案例:如何在人海中找到用户名输入框
//input[@id='username'] # 加上标签名更专业 - 操作三部曲:
- 先喝杯咖啡等待2秒(页面加载)
- 优雅地输入
send_keys("你的账号") - 再喝杯咖啡等待2秒

3. 模糊搜索大法
- 神秘口诀:
contains(@属性,'关键词') - 适用情况:当属性值像女朋友的心情一样多变时
- 密码框捕获术:
//input[contains(@name,'pass')] # 管它叫password还是passwd - 机密输入:
send_keys("千万别用123456")
4. 组合拳定位术
- 连接符:
and(全都要) /or(二选一) - 验证码抓捕记:
//input[@placeholder="验证码" and @type="text"] # 双重保险 - 专家建议:
- 能一招制敌就不要用组合技
- 但遇到狡猾的元素,多几个特征更安心
5. 家族关系追踪法
- 语法妙招:
//爷爷元素[@特征]//孙子元素 - 登录按钮家族秘闻:
//div[@class='login_box']//button[text()='登录'] - 优势分析:
- 解决"大众脸"元素的尴尬
- 让定位路径像家族谱系一样清晰
二、自动化操作"剧本"
-
标准演出流程:
1. 点击登录(文本定位) -> //a[text()='登录'] 2. 输入账号(精确打击) -> //input[@id='username'] 3. 输入密码(模糊匹配) -> //input[contains(@name,'pass')] 4. 填写验证码(组合技) -> //input[@placeholder="验证码" and @type="text"] 5. 提交登录(家族关系) -> //form[@id='login']/button -
等待的艺术:
- 每个步骤间留2秒"表演时间"
- 关键操作后要有"特写镜头"(显式等待)
-
应急预案:
- 为每个定位动作准备try-catch"安全气囊"
- 对付善变元素,请出WebDriverWait"特效团队"

三、XPath定位"选秀大会"
| 定位方法 | 必杀技 | 擅长领域 | 稳定分 | 难度 |
|---|---|---|---|---|
| 文字猎人 | //*[text()=''] | 明码标价的元素 | ★★☆ | ⭐⭐ |
| 属性侦探 | //*[@id=''] | 有身份证的元素 | ★★★ | ⭐ |
| 模糊搜索 | contains(@属性,'') | 变装达人元素 | ★★☆ | ⭐⭐ |
| 组合拳 | [@A='' and @B=''] | 多重身份元素 | ★★★ | ⭐⭐⭐ |
| 家族追踪 | //父/子 | 有家谱的元素 | ★★★ | ⭐⭐ |
四、XPath"生存法则"
-
元素筛选三原则:
- 先找有ID的"贵族"元素
- 次选name/class的"中产"元素
- 最后考虑文字和家谱的"平民"元素
-
代码优雅之道:
# 专业选手写法(带特效和保险) try: username = WebDriverWait(driver,10).until( EC.presence_of_element_located((By.XPATH, "//input[@id='username']")) ) username.send_keys("professional") except Exception as e: print(f"定位失败,原因:{str(e)}") raise -
考试通关秘籍:
- 记住属性优先级:ID > name > class
contains()别写成contain()(少个s要人命)- 组合条件时别把and/or搞混
- 检查层级路径是否完整
五、疑难杂症急诊室
-
定位失效急救:
- F12开发者工具是你的听诊器
- 在Console用$x()测试XPath
- 检查元素是否在"平行宇宙"(iframe)里
-
善变元素对策:
//*[starts-with(@id, '动态前缀_')] //*[ends-with(@name, '_动态后缀')] # XPath 2.0+ -
同卵多胞胎区分:
(//input[@class='form-control'])[position()=2] # 取第二个 //input[@class='form-control' and position()=3] # 取第三个
终极忠告:XPath就像谈恋爱,有时候需要精确出击,有时候需要模糊包容,关键是要灵活变通!建议为重要元素准备B计划甚至C计划,毕竟网页元素比女朋友还善变呢~
更多推荐


所有评论(0)