You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 20:50:30