我在两台机器上使用 Java 中的 TestNG、chromium 和 Selenium 运行测试:
- 我自己的笔记本电脑
- 一台我没有物理访问权限的 Mac Mini,我通过 SSH 连接,它的项目结构与我笔记本电脑上的项目相同。
两台机器都在同一个公司代理后面运行。
我遇到的问题如下:
- 虽然测试在我的机器上运行顺利,但当我在 Mac Mini 上执行启动它们的命令时,当告诉 Selenium WebDriver 使用
driver.navigate().to(url)
or导航到任何指定的 url 时,执行停止driver.get(url)
;导致程序冻结而不抛出任何异常,基本上保持暂停。
代码类似于以下内容:
在 @BeforeClass beforeClass() 驱动程序中使用 ChromeOptions 使用 ChromeDriver 的实例进行初始化。在其他设置中,我将以下参数添加到 ChromeOptions 中,例如
chromeOptions.addArguments(options)
:类似options
的东西在哪里--disable-web-security, --allow-running-insecure-content, --allow-insecure-localhost
,最重要的是:(--proxy-server=address:port
例如 --proxy-server=172.26.44.146:3128)。在 @BeforeMethod beforeMethod() 检查驱动程序不是
null
并且 URL url 是有效的之后,我执行类似于以下程式化代码的内容:
try {
log.debug("Navigating to: " + url);
driver.navigate().to(url);
log.debug("Navigated to url: " + driver.getCurrentUrl());
} catch (Exception e) {
log.error("Unable to navigate at page: " + url.toString());
throw e;
}
正如我所说,在 Mac Mini 上通过 SSH 使用命令行以类似的方式运行测试时:java -cp WORKSPACE org.testng.TestNG testng.xml
代码停止执行并冻结在log.debug("Navigating to: " + url);
基本上不产生其他输出并迫使我手动停止执行测试。
作为附加信息,使用铬版本 72.0.3609.0 运行测试。ChromeOptions 还接收以下代理设置(例如:)其中chromeOptions.setProxy(p);
p 是Proxy
p.setProxyType(ProxyType.MANUAL);
p.setAutodetect(false);
我怀疑代理有问题(我怀疑我是否正确地预配置了程序),但坦率地说,我对相同的脚本在我的机器上本地运行并且无法在 Mac Mini 上本地运行时感到困惑测试通过 SSH 启动。