> 技术文档 > 软件测试入门到精通-第10周-ui自动化测试-selenium元素定位的另一种方式+元素定位小结

软件测试入门到精通-第10周-ui自动化测试-selenium元素定位的另一种方式+元素定位小结


🤖 《Selenium元素定位新姿势:By类装逼指南》

软件测试入门到精通-第10周-ui自动化测试-selenium元素定位的另一种方式+元素定位小结

🚀 1. 开篇暴击:为什么要学新写法

老铁们还在用find_element_by_id这种上古写法?醒醒吧!Selenium官方早就偷偷把旧写法扔进垃圾桶了(4.1+版本直接废弃)。

现在流行的是By类统一写法——像程序员届的KPI考核,强制要求所有定位方式必须\"整齐划一\"!

💡 冷知识:旧写法其实是个\"套娃\",底层还是偷偷调用了find_element,就像你妈喊你全名时,本质上还是在叫你本人。


软件测试入门到精通-第10周-ui自动化测试-selenium元素定位的另一种方式+元素定位小结

🔍 2. 新旧写法PK:一场代码审美的降维打击

让我们围观两种写法的公开处刑现场:

对比维度 旧写法(土味版) 新写法(高定版) 真相 语法 find_element_by_id(\"dog\") find_element(By.ID, \"dog\") 功能一样,但新写法更优雅 底层 间接调用find_element 直接调用find_element 脱裤子放x→直接放x 未来 已加入考古套餐 官方唯一指定写法 旧写法≈IE6

程序员の觉悟

用旧写法就像在2023年穿喇叭裤——不是不行,但容易被同事在背后指指点点。


软件测试入门到精通-第10周-ui自动化测试-selenium元素定位的另一种方式+元素定位小结

⚙️ 3. 硬核原理:By类的科技与狠活

3.1 核心奥义

所有定位最终都会归顺到:

find_element(by=By.XXX, value=\"你的表白文案\") 
  • by参数:相当于选择约会方式(微信撩/咖啡馆见/父母相亲)
  • value参数:就是你的土味情话

3.2 实操演示

from selenium.webdriver.common.by import By # 用CSS选择器精准狙击 driver.find_element(By.CSS_SELECTOR, \"#submit-btn\") # 用XPath地毯式搜索 driver.find_element(By.XPATH, \"//button[contains(text(),\'爱我\')]\") 

软件测试入门到精通-第10周-ui自动化测试-selenium元素定位的另一种方式+元素定位小结

🚨 防坑指南By.ID不是字符串!直接写By.ID=\"id\"会触发程序员的暴怒机制。


🎯 4. By类八大定位姿势大全

撩元素方式 By类代码 旧版对应 实战示例 ID直球 By.ID find_element_by_id find_element(By.ID, \"女友\") XPath玄学 By.XPATH find_element_by_xpath find_element(By.XPATH, \"//div[@class=\'有钱\']\") 链接诱惑 By.LINK_TEXT find_element_by_link_text find_element(By.LINK_TEXT, \"点击领女朋友\") 模糊匹配 By.PARTIAL_LINK_TEXT find_element_by_partial_link_text find_element(By.PARTIAL_LINK_TEXT, \"男\") Name属性 By.NAME find_element_by_name find_element(By.NAME, \"存款\") 标签硬刚 By.TAG_NAME find_element_by_tag_name find_element(By.TAG_NAME, \"钱\") Class暗示 By.CLASS_NAME find_element_by_class_name find_element(By.CLASS_NAME, \"高富帅\") CSS心机 By.CSS_SELECTOR find_element_by_css_selector find_element(By.CSS_SELECTOR, \".海王\")

软件测试入门到精通-第10周-ui自动化测试-selenium元素定位的另一种方式+元素定位小结

5. 新写法三大爽点

  1. 代码强迫症福音
    终于不用记住find_element_by_xxx全家桶,一套find_element走天下!

  2. 参数化神器
    可以玩出这种骚操作:

    def 找元素(方式,): return driver.find_element(by=方式, value=) 
  3. 未来proof
    官方都明牌了:“旧写法迟早要凉”,现在转新写法等于提前买养老保险。


软件测试入门到精通-第10周-ui自动化测试-selenium元素定位的另一种方式+元素定位小结

🛠️ 6. 实战骚操作

6.1 旧代码改造指南

祖传代码 潮人改法 find_element_by_name(\"user\") find_element(By.NAME, \"user\") find_elements_by_class_name(\"btn\") find_elements(By.CLASS_NAME, \"btn\")

Pro tip
全局替换快捷键(Ctrl+Shift+H)是你的最佳队友!

6.2 高阶玩法:定位策略模式

定位策略 = { \"登录按钮\": (By.CSS_SELECTOR, \"#login\"), \"搜索框\": (By.XPATH, \"//input[@type=\'search\']\") } def 点击(元素名): driver.find_element(*定位策略[元素名]).click() 

💣 7. 总结暴击

  • 必须用:新项目/维护老项目
  • 不要用:想被同事吐槽/准备转行送外卖
  • 🚀 终极建议:现在就动手重构旧代码,越拖技术债越多!

📅 2023年程序员生存法则
不会用By类写元素定位 ≈ 不会用筷子吃中餐

(完)


🎁 彩蛋:防秃小贴士

遇到元素定位失败时:

  1. 检查是否导入from selenium.webdriver.common.by import By
  2. 按F12确认元素没有被前端删库跑路
  3. 终极方案:重启IDE/睡一觉/转行卖红薯

🚀《元素定位秘籍:从青铜到王者全攻略》

(内含考试急救包+实战骚操作)


▎第1章 定位方法论——选对姿势很重要

1.1 官方认证的\"元素相亲鄙视链\"
黄金VIP通道:ID(唯一身份证) > Name(常用昵称) > Class(大众脸)
⚠️ 备胎方案:属性混搭(ID+Class组CP) > 家谱查询(父元素/子元素) > 文身识别(text()文本匹配)

💡 老司机忠告
当你在考场突然失忆时——
掏出XPath这把\"万能钥匙\",能打开90%的元素大门!
(就像用通配符*破解所有WiFi密码一样刺激)

1.2 高阶玩家骚操作
套娃定位法//div[@id=\'header\']//span[contains(@class,\'icon\')]
动态元素钓鱼//button[starts-with(@id,\'btn_\')]
反侦察技巧:用开发者工具检查XPath是否含./parent::*/child::*这类间谍代码


▎第2章 元素信息榨取术

2.1 元素体检报告生成指南

骚操作 相当于 经典翻车现场 .size 量三围(宽高) 测出广告弹窗尺寸为0×0(隐身了!) .text 偷看聊天记录 获取到\"加载中…\"(被套路了) .get_attribute 查户口(href/src/value) 取到javascript:void(0)(耍流氓) .is_displayed 测隐形斗篷 元素存在但display:none(空气侠)

🐞 防坑TIP:遇到undefined时试试.get_property(\'value\')


▎第3章 考场暴击场景生存指南

3.1 俄罗斯套娃元素
👉 用find_elements()[n]选第n个娃
(就像自动贩卖机按编号选饮料)

3.2 动态变形金刚元素
✅ 正确姿势://*[contains(@id,\'dynamic_\')]
❌ 自杀行为:直接复制含t0k3n=abcde的XPath

3.3 影分身之术(Shadow DOM)
🔮 破解咒语:

shadow_host = driver.find_element(...)shadow_root = shadow_host.shadow_roothidden_element = shadow_root.find_element(...)

▎第4章 学渣逆袭宝典

4.1 二选一保命策略
XPath派:适合喜欢//div[@id=\'root\']//span[text()=\'确认\']这种侦探推理的
CSS派:适合写div.header>a.logo这种极简主义的

4.2 考试急救口诀

“一ID二Name,Class不行就捆绑
路径定位像导航,文本定位要稳当
遇到动态不要慌,contains/starts-with来帮忙”


▎番外篇 开发者工具黑科技

  1. XPath即时验孕:在Elements面板按Ctrl+F输入XPath
  2. CSS选择器偷师:右键元素 → Copy → Copy selector
  3. 元素快照取证driver.save_screenshot(\'犯罪现场.png\')

🛑 警告:直接复制的XPath可能含有\"化妆师\"(动态类名)和\"替身演员\"(iframe)!

(测试时记得先time.sleep(3)给元素化妆时间哦~)