Selenium 3.x/4.x NuGet版本变更导致Electron应用测试异常
问题分析与解决方案
核心原因
Selenium WebDriver 4.0.0a2版本开始对ChromeDriverService的生命周期管理做了破坏性重构:
- 在3.x/4.0.0a1版本中,手动启动
ChromeDriverService后传入ChromeDriver构造函数,Driver会基于这个已启动的service去启动目标Electron应用。 - 但从4.0.0a2版本开始,当传入已启动的
ChromeDriverService时,Driver会默认尝试连接到该service上已存在的会话,而非基于该service启动新的Electron实例,这就导致代码陷入等待会话连接的超时状态,自然不会弹出应用窗口。
修复方案
直接移除手动启动ChromeDriverService的代码,让ChromeDriver自动管理service的创建与启动,这也是Selenium 4官方推荐的使用方式:
修改后的SetUpBrowser方法代码:
[SetUp] public void SetUpBrowser() { ChromeOptions options = new ChromeOptions(); options.BinaryLocation = @"FullPathToMyElectronApp.exe"; // 直接创建service,无需手动调用Start(),交给ChromeDriver处理生命周期 ChromeDriverService chromeService = ChromeDriverService.CreateDefaultService(@"C:\\chromedriver", @"chromedriver.exe"); chromeService.Port = 9999; // 传入未启动的service和options,Driver会自动启动service并关联Electron应用 driver = new ChromeDriver(chromeService, options); }
额外说明
如果确实需要手动控制ChromeDriverService的生命周期(比如复用service),需要在启动service时指定与Electron绑定的启动参数,同时在创建ChromeDriver时明确告知Driver要启动新会话,但这种方式复杂度较高,除非有特殊需求,否则优先使用上述简化方案。
内容的提问来源于stack exchange,提问作者Mad Scientist
相关产品推荐
相关产品推荐

