Selenium firefox webdriver 无法更新 gecko(tcp 连接错误)

问题描述 投票:0回答:1

我正在一个专用项目中添加 Selenium 测试来测试 Web 应用程序。该项目使用java 17,它具有以下依赖项

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.18.1</version>
    <scope>compile</scope>
</dependency>

我在计算机上安装了最新版本的 Mozilla Firefox(截至 2024 年 3 月 20 日为 124.0)。我用 java 编写了一堆测试,它按预期工作......但我的问题是 FirefoxDriver 的每个新实例都在开始测试之前尝试更新 gecko 驱动程序。 它在开始测试之前等待超时,这使每个测试减慢了 30 秒...... 控制台中的错误是:

2024-03-20T14:17:46.115+01:00 警告 25024 --- [ 主要] o.o.selenium.manager.SeleniumManager :管理 firefox 时出现异常: 发送 url 请求时出错 (https://github.com/mozilla/geckodriver/releases/latest):尝试时出错 连接:tcp 连接错误:Une tentative de connexion a échoué car 联合党与联合国召开的会议 一定会与汽车酒店联系 连接n’a pas répondu。 (操作系统错误10060)

我是企业代理的幕后黑手。如果我在没有 VPN 的情况下运行测试,我不会遇到此超时,但我无法访问我正在测试的 Web 应用程序。我猜这是一个代理问题,但是一旦 MF 在 gecko 超时后启动,我就可以访问 MF 实例上的任何内容(https github、google、我的内部 web 应用程序...),所以我不明白配置中有什么问题。

我正在使用以下代码创建 FirefoxDriver 的新实例,java注释是我尝试解决问题但没有成功的方法:

        final FirefoxOptions opts = new FirefoxOptions();
        if (BooleanUtils.isTrue(this.browserIsHeadless)) {
            opts.addArguments("--headless");
        }
//        opts.addPreference("network.proxy.type", 4);
//        opts.addPreference("app.update.auto", false);
//        opts.addPreference("app.update.enabled", false);
//        opts.addPreference("browser.helperApps.alwaysAsk.force", false);
//        opts.addPreference("browser.download.folderList", 2);
//        opts.addPreference("browser.download.manager.showWhenStarting", false);
//        opts.addPreference("browser.download.panel.shown", false);
//        opts.addPreference("extensions.blocklist.enabled", false);
//        opts.addPreference("browser.download.manager.alertOnEXEOpen", false);
//        opts.addPreference("browser.download.manager.focusWhenStarting", false);
//        opts.addPreference("browser.download.manager.useWindow", true);
//        opts.addPreference("browser.download.manager.closeWhenDone", true);
//        opts.addPreference("media.gmp-manager.cert.requireBuiltIn", false);
//        opts.addPreference("media.gmp-manager.cert.checkAttributes", false);
//        opts.addPreference("media.gmp-provider.enabled", false);
//        opts.addPreference("media.gmp-widevinecdm.enabled", false);
//        opts.addPreference("media.gmp-widevinecdm.visible", false);
//        opts.addPreference("media.gmp.trial-create.enabled", false);
//        final Proxy proxy = new Proxy();
//        proxy.setAutodetect(true);
//        opts.addPreference("network.proxy.type", 4);
//        opts.setCapability("proxy", proxy);

        this.setDriver(new FirefoxDriver(opts));

我可以接受任何允许我运行测试而无需等待 30 秒 Gecko 更新超时的解决方案,这样 :

  • 禁用 gecko 更新(我的 Windows 路径中有本地 gecko)
  • 绕过代理检查更新
  • 通过其他方式配置FirefoxDriver的代理
  • 如果没有找到真正的解决方案,将超时减少到1秒
java selenium-webdriver integration-testing java-17 selenium-firefoxdriver
1个回答
0
投票

睡了一觉,今天早上我找到了解决方案。我必须配置企业代理才能访问 github,并且必须避免使用代理来访问我正在测试的 Web 应用程序。

 final Proxy proxy = new Proxy();
 proxy.setHttpProxy("host:port");
 proxy.setSslProxy("host:port");
 proxy.setNoProxy("*.company.com,*localhost");
 opts.setCapability("proxy", proxy);
 this.setDriver(new FirefoxDriver(opts));
© www.soinside.com 2019 - 2024. All rights reserved.