做自动化测试的朋友是不是有这种感觉?刚把 Selenium 3.x 用顺,公司突然要求升级到 4.x 版本,打开代码一堆红线报错;想试试新功能,文档全是英文看得头大,网上教程还停留在旧版本;好不容易跑起来脚本,要么元素定位失灵,要么浏览器启动就崩溃,调试半天找不着原因?别愁,今天兔子哥就结合自己升级 4.x 的踩坑经历,讲讲 4.x 版本的核心新功能,再汇总新手常遇到的报错解决方法,附学员真实反馈,新手也能少走弯路。
一、Selenium 4.x 这 3 个核心功能,升级后一定要会用
从 3.x 升到 4.x,不是简单换个版本号,新功能能让测试效率提升不少。这几个功能用熟了,你会发现比旧版本顺手多了。
1. 相对定位:找不到元素?用邻居元素 “指路”
以前定位元素全靠自己找 ID、XPath,遇到没特征的元素就卡壳。4.x 新增的相对定位功能,能通过 “邻居” 元素定位,比如 “在某个按钮右边的输入框”“在某个文本下方的复选框”。
用法很简单,先导入 RelativeLocator,比如定位 “用户名” 文本右边的输入框:
python
from selenium.webdriver.support.relative_locator import locate_with# 先定位“用户名”文本元素username_label = driver.find_element(By.XPATH, "//label[text()='用户名']")# 找它右边的输入框username_input = driver.find_element(locate_with(By.TAG_NAME, "input").to_right_of(username_label))学员 @测试小周说:“之前定位动态元素总失败,用了相对定位后,脚本稳定性提高了不少,不用天天改 XPath 了。”
2. Selenium Manager:自动装驱动,告别 “驱动地狱”
3.x 最烦的就是驱动版本要和浏览器对应,换台电脑就得重新找驱动。4.x 自带的 Selenium Manager 能自动检测浏览器版本,自动下载匹配的驱动,不用手动下载配置了!
只需要简单初始化浏览器:
python
from selenium import webdriver# 4.x里直接这样写,不用指定驱动路径driver = webdriver.Chrome()是不是超方便?不过要注意,低版本 Python 可能不支持,建议用 Python 3.7 以上版本。有朋友反馈偶尔会出现驱动下载慢的情况,这时候手动挂个国内镜像源就能解决。
3. 新的等待机制:显式等待写法更简单
4.x 对显式等待做了优化,不用再导入 WebDriverWait 和 expected_conditions,直接用 driver 的 until 方法,代码更简洁:
python
# 等登录按钮可点击,最多等10秒driver.until(lambda d: d.find_element(By.ID, "loginBtn").is_enabled(), timeout=10)虽然和旧写法功能差不多,但代码量少了,看起来更清爽,新手也不容易记混参数。
二、升级 4.x 后常见报错?这 6 个问题按步骤解决
升级后最头疼的就是报错,兔子哥整理了学员反馈最多的 6 个问题,附解决步骤:
1. 报错 “'WebDriver' object has no attribute 'find_element_by_id'”
这是因为 4.x 移除了旧的定位方法(如 find_element_by_id),统一用 find_element (By.ID, "id 值")。解决方法:把所有旧写法替换成新语法,比如:
旧:driver.find_element_by_id ("username")
新:driver.find_element (By.ID, "username")
记得在开头导入 By:from selenium.webdriver.common.by import By
2. 浏览器启动后秒退,没报错但看不到效果
这是因为脚本执行完就自动关闭浏览器了。在代码最后加一行等待就行:
python
input("测试完成,按回车关闭浏览器...") # 加这句会等你按回车再关闭@自动化小李说:“刚开始总以为是代码错了,加了这句才发现脚本其实跑成功了,只是关太快没看到。”
3. 报错 “SessionNotCreatedException: Could not start a new session”
大概率是浏览器版本和 Selenium 版本不兼容。解决步骤:
- 检查浏览器版本(比如 Chrome 右上角三个点→关于 Chrome)
- 升级 Selenium 到最新版:pip install --upgrade selenium
- 要是还不行,手动下载对应版本驱动放到 Python 安装目录
4. 相对定位时报 “AttributeError: module'selenium.webdriver' has no attribute'support'”
这是因为没导入相对定位模块。在代码开头加:
from selenium.webdriver.support.relative_locator import locate_with
记得 Selenium 版本要在 4.4.0 以上,低版本没有这个功能。
5. 运行脚本时浏览器空白,不打开目标页面
检查是不是 get 方法写错了,4.x 里 driver.get () 参数必须是完整 URL,比如:
正确:driver.get ("https://www.baidu.com")
错误:driver.get ("baidu.com") # 少了 https:// 会出错
6. 报错 “TimeoutException” 超时
可能是页面加载太慢,或者元素定位表达式错了。先检查 XPath/CSS 是否正确,再加长等待时间,比如把 timeout 从 5 秒改成 10 秒。
三、给新手的 3 个升级建议
从 3.x 过渡到 4.x 不用急着全量替换,兔子哥建议这样做:
- 先在新脚本里用 4.x 写法,旧脚本慢慢迁移,避免一次性改太多出问题。
- 把常用的操作封装成工具类,比如定位元素、等待方法,以后换版本改起来方便。
- 遇到报错先看控制台的错误信息,大部分问题都能从报错里找到线索,比如提示 “no such element” 就先检查定位表达式对不对。
其实 Selenium 4.x 比 3.x 友好多了,特别是自动管理驱动和相对定位这两个功能,能省不少事。很多学员刚开始怕升级麻烦,用了之后都说 “真香”。新手不用怕版本问题,跟着教程一步步练,遇到报错按上面的方法排查,很快就能上手。自动化测试的核心是思路,工具版本只是辅助,只要逻辑对了,换个版本也能很快适应。希望这篇教程能帮到正在升级 4.x 的你,动手试试新功能吧,效率真的会提高!
标签: selenium
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~