本文目录导读:

- 完全支持 W3C WebDriver 标准(最重要的变化)
- 新的定位器 API(更强大、更易读)
- Chrome DevTools Protocol 集成(最实用的新功能)
- 新的窗口和标签页管理 API
- Selenium Grid 的重大改进(适合分布式测试)
- 其他重要变化
- 升级建议
- 总结一句话
Selenium 4 是一次重大的架构升级和功能更新,主要变化集中在 WebDriver 的标准化、新 API 的引入 以及 对现代浏览器和开发流程的更好支持。
以下是 Selenium 4 的核心更新内容,按重要程度排序:
完全支持 W3C WebDriver 标准(最重要的变化)
- 旧版(Selenium 3): 使用的是 JSON Wire Protocol(过时协议),浏览器需要将 W3C 命令“翻译”成自己的命令,有时会出错或不兼容。
- 新版(Selenium 4): 原生支持 W3C WebDriver 标准,浏览器直接理解 WebDriver 命令,无需转换。
- 好处:
- 更好的稳定性:跨浏览器兼容性显著提升。
- 更简洁的代码:不再需要
DesiredCapabilities等繁琐配置。 - 性能提升:通信过程更直接,速度更快。
新的定位器 API(更强大、更易读)
引入了 相对定位器(Relative Locator),让你可以基于元素与其他元素的位置关系来定位。
// 示例:定位“登录按钮”上方的“用户名输入框”
WebElement loginButton = driver.findElement(By.id("login"));
WebElement usernameField = driver.findElement(withTagName("input")
.above(loginButton));
支持的方法:above()、below()、toLeftOf()、toRightOf()、near()。
Chrome DevTools Protocol 集成(最实用的新功能)
Selenium 4 内置了对 CDP(Chrome DevTools Protocol) 的支持,允许你直接操作浏览器的开发者工具功能,而无需安装其他依赖。
-
模拟地理位置:
from selenium import webdriver driver = webdriver.Chrome() driver.execute_cdp_cmd("Emulation.setGeolocationOverride", { "latitude": 40.7128, "longitude": -74.0060, "accuracy": 1 }) -
模拟网络条件(测试弱网环境):
driver.execute_cdp_cmd("Network.enable", {}) driver.execute_cdp_cmd("Network.emulateNetworkConditions", { "offline": False, "latency": 100, "downloadThroughput": 500, "uploadThroughput": 500 }) -
捕获控制台日志、网络请求等。
新的窗口和标签页管理 API
操作浏览器窗口变得简单且优雅。
-
创建新标签页/窗口(无需 switchTo):
// 打开新标签页并自动切换过去 driver.switchTo().newWindow(WindowType.TAB); // 打开新窗口并自动切换过去 driver.switchTo().newWindow(WindowType.WINDOW);
-
获取窗口 ID 列表:
window_ids = driver.window_handles # 功能不变,但更稳定
Selenium Grid 的重大改进(适合分布式测试)
- 完全重写:使用现代技术(Node.js、WebSockets)替换了旧架构。
- 简化部署:启动更简单,只需一个
.jar文件。 - 支持 Docker 和 Kubernetes:更容易在容器化环境中运行。
- 主动监控:可以实时查看节点状态、会话队列和日志。
其他重要变化
- 删除过时功能:移除了
ExpectedConditions中的elementToBeClickable的旧实现(现在使用新的 WebDriverWait)。 - 改进的 Actions API:更流畅的键盘和鼠标操作(如拖拽、悬停)。
- POM.xml / Build 简化:所有模块(Core、Grid、Remote)整合到一个
selenium-java包中,不再需要分别添加client-combined和server-standalone。 - 官方文档更新:提供了更清晰的示例和最佳实践。
升级建议
- 如果你正在使用 Selenium 3:强烈建议升级,尤其是为了 W3C 标准化 和 CDP 支持。
- 特别注意:Selenium 4 移除了 Selenium 3 中标记为 过时(deprecated) 的方法,升级前建议先清理代码中的过时使用(如
DesiredCapabilities、DefaultCapabilities、FindsById等)。 - 兼容性:Selenium 4 支持 Java 8+、Python 3.7+、.NET Core 3.1+、Ruby 2.6+。
总结一句话
Selenium 4 的核心是:拥抱标准(W3C)、开放底层能力(CDP)、简化开发体验(相对定位器 & 新窗口管理)。