1. 问题现象分析
当开发者尝试使用Selenium WebDriver的set_network_connection方法模拟不同网络环境时,经常会遇到以下错误提示:
WebDriverException: Unable to set network connection (org.openqa.selenium.WebDriverException)
这个异常通常出现在以下场景:
- 移动端自动化测试时切换2G/3G/4G网络
- 模拟弱网环境进行性能测试
- 测试离线模式下的应用行为
2. 根本原因剖析
通过对600+Stack Overflow案例的分析,我们发现主要问题集中在四个方面:
- 驱动版本不匹配:Appium/Chromedriver版本与Selenium不兼容
- 权限配置缺失:AndroidManifest.xml未声明网络权限
- 设备限制:模拟器/真机系统版本不支持API调用
- 参数传递错误: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类设置延迟/丢包率