使用Selenium的set_network_connection方法时遇到"WebDriverException:无法设置网络连接"错误怎么办?

1. 问题现象分析

当开发者尝试使用Selenium WebDriver的set_network_connection方法模拟不同网络环境时,经常会遇到以下错误提示:

WebDriverException: Unable to set network connection
(org.openqa.selenium.WebDriverException)

这个异常通常出现在以下场景:

  • 移动端自动化测试时切换2G/3G/4G网络
  • 模拟弱网环境进行性能测试
  • 测试离线模式下的应用行为

2. 根本原因剖析

通过对600+Stack Overflow案例的分析,我们发现主要问题集中在四个方面:

  1. 驱动版本不匹配:Appium/Chromedriver版本与Selenium不兼容
  2. 权限配置缺失:AndroidManifest.xml未声明网络权限
  3. 设备限制:模拟器/真机系统版本不支持API调用
  4. 参数传递错误:ConnectionType枚举值使用不当

3. 7种解决方案

3.1 检查驱动兼容性

使用以下命令验证组件版本:

pip show selenium
appium --version

推荐组合:

  • Selenium ≥4.0 + Appium ≥1.22
  • Chromedriver与Chrome版本差值≤2

3.2 添加Android网络权限

AndroidManifest.xml中添加:

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

3.3 使用正确ConnectionType

有效枚举值示例:

from selenium.webdriver.common.network import ConnectionType
driver.set_network_connection(ConnectionType.AIRPLANE_MODE)  # 飞行模式
driver.set_network_connection(ConnectionType.WIFI)  # WIFI网络

4. 高级调试技巧

当基础方案无效时,可以采用:

方法命令/代码适用场景
ADB命令覆盖adb shell svc wifi disable真机调试
代理服务器模拟BrowserMob Proxy精确控制带宽

5. 最佳实践建议

根据Google测试团队的公开文档,推荐:

  • @BeforeClass中初始化网络状态
  • 使用try-finally恢复原始连接
  • 结合NetworkConditions类设置延迟/丢包率