软件测试入门到精通-第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_element
find_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.ID
find_element_by_id
find_element(By.ID, \"女友\")
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, \"男\")
By.NAME
find_element_by_name
find_element(By.NAME, \"存款\")
By.TAG_NAME
find_element_by_tag_name
find_element(By.TAG_NAME, \"钱\")
By.CLASS_NAME
find_element_by_class_name
find_element(By.CLASS_NAME, \"高富帅\")
By.CSS_SELECTOR
find_element_by_css_selector
find_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_attribute
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来帮忙”
▎番外篇 开发者工具黑科技
- XPath即时验孕:在Elements面板按Ctrl+F输入XPath
- CSS选择器偷师:右键元素 → Copy → Copy selector
- 元素快照取证:
driver.save_screenshot(\'犯罪现场.png\')
🛑 警告:直接复制的XPath可能含有\"化妆师\"(动态类名)和\"替身演员\"(iframe)!
(测试时记得先time.sleep(3)
给元素化妆时间哦~)