软件测试入门到精通-第10周-ui自动化测试-selenium元素定位的另一种方式+元素定位小结
🤖 《Selenium元素定位新姿势:By类装逼指南》

🚀 1. 开篇暴击:为什么要学新写法?
老铁们还在用find_element_by_id这种上古写法?醒醒吧!Selenium官方早就偷偷把旧写法扔进垃圾桶了(4.1+版本直接废弃)。
现在流行的是By类统一写法——像程序员届的KPI考核,强制要求所有定位方式必须\"整齐划一\"!
💡 冷知识:旧写法其实是个\"套娃\",底层还是偷偷调用了
find_element,就像你妈喊你全名时,本质上还是在叫你本人。

🔍 2. 新旧写法PK:一场代码审美的降维打击
让我们围观两种写法的公开处刑现场:
find_element_by_id(\"dog\")find_element(By.ID, \"dog\")find_elementfind_element程序员の觉悟:
用旧写法就像在2023年穿喇叭裤——不是不行,但容易被同事在背后指指点点。

⚙️ 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(),\'爱我\')]\")

🚨 防坑指南:
By.ID不是字符串!直接写By.ID=\"id\"会触发程序员的暴怒机制。
🎯 4. By类八大定位姿势大全
By.IDfind_element_by_idfind_element(By.ID, \"女友\")By.XPATHfind_element_by_xpathfind_element(By.XPATH, \"//div[@class=\'有钱\']\")By.LINK_TEXTfind_element_by_link_textfind_element(By.LINK_TEXT, \"点击领女朋友\")By.PARTIAL_LINK_TEXTfind_element_by_partial_link_textfind_element(By.PARTIAL_LINK_TEXT, \"男\")By.NAMEfind_element_by_namefind_element(By.NAME, \"存款\")By.TAG_NAMEfind_element_by_tag_namefind_element(By.TAG_NAME, \"钱\")By.CLASS_NAMEfind_element_by_class_namefind_element(By.CLASS_NAME, \"高富帅\")By.CSS_SELECTORfind_element_by_css_selectorfind_element(By.CSS_SELECTOR, \".海王\")
✨ 5. 新写法三大爽点
-
代码强迫症福音
终于不用记住find_element_by_xxx全家桶,一套find_element走天下! -
参数化神器
可以玩出这种骚操作:def 找元素(方式, 值): return driver.find_element(by=方式, value=值) -
未来proof
官方都明牌了:“旧写法迟早要凉”,现在转新写法等于提前买养老保险。

🛠️ 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类写元素定位 ≈ 不会用筷子吃中餐
(完)
🎁 彩蛋:防秃小贴士
遇到元素定位失败时:
- 检查是否导入
from selenium.webdriver.common.by import By - 按F12确认元素没有被前端删库跑路
- 终极方案:重启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.text.get_attributejavascript:void(0)(耍流氓).is_displayeddisplay: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来帮忙”
▎番外篇 开发者工具黑科技
- XPath即时验孕:在Elements面板按Ctrl+F输入XPath
- CSS选择器偷师:右键元素 → Copy → Copy selector
- 元素快照取证:
driver.save_screenshot(\'犯罪现场.png\')
🛑 警告:直接复制的XPath可能含有\"化妆师\"(动态类名)和\"替身演员\"(iframe)!
(测试时记得先time.sleep(3)给元素化妆时间哦~)


