我正在一个专用项目中添加 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 更新超时的解决方案,这样 :
睡了一觉,今天早上我找到了解决方案。我必须配置企业代理才能访问 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));