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

如何在Selenium中配置AdBlock?Cucumber测试异常排查

问题分析与解决方案

核心问题

  1. 配置未关联到实际Driver:你创建了包含AdBlock扩展的ChromeOptions,但没有将这个配置传递给Util.setEnvironmentAndGetDriver方法。最终获取的driver是该方法用默认参数创建的,自然不带广告拦截功能。
  2. 双浏览器实例冲突:额外启动的带扩展浏览器,是因为你定义了配置但未实际使用,可能Util类的方法内部存在默认初始化逻辑,导致创建了两个独立的浏览器实例——其中未被赋值给全局driver的那个,自然无法响应测试步骤。

修复步骤

1. 改造Util.setEnvironmentAndGetDriver方法

让它支持接收ChromeOptions参数(如果需要兼容多浏览器,可改为接收Capabilities),示例如下:

public static WebDriver setEnvironmentAndGetDriver(String browser, ChromeOptions options) {
    if ("chrome".equalsIgnoreCase(browser)) {
        // 创建Driver时传入配置好的Options
        return new ChromeDriver(options);
    }
    // 其他浏览器的初始化逻辑(如Firefox、Edge等)
    // ...
}

2. 更新Hook类的setup方法

将配置好的ChromeOptions传递给Driver创建方法,同时确保CRX文件路径正确:

@Before
public void setup() throws IOException {
    ChromeOptions options = new ChromeOptions();
    // 推荐使用绝对路径,避免不同环境下文件找不到的问题
    options.addExtensions(new File("/your/absolute/path/extension_5_3_2_0.crx"));
    String browser = ReadPropertyFileSingleton.getInstance().getProp("browser");
    // 传递配置到Driver创建方法
    driver = Util.setEnvironmentAndGetDriver(browser, options);
    
    assert driver != null;
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}

额外提示

  • 版本兼容性:确保AdBlock CRX版本与ChromeDriver、Chrome浏览器版本匹配,版本不匹配可能导致扩展加载失败。
  • 路径可靠性:相对路径易受运行环境影响,建议使用绝对路径或通过类路径加载CRX文件。
  • 检查重复初始化:确认Util类的方法内部没有重复创建浏览器实例的逻辑,避免再次出现双窗口问题。

关于CRX方式使用AdBlock的可行性

完全可以通过这种方式在Selenium测试中加载AdBlock扩展,只要配置正确,扩展就能正常拦截广告,无需其他特殊操作。

内容的提问来源于stack exchange,提问作者Sergey Ocheretko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:05:12