【发布时间】:2021-10-08 22:05:23
【问题描述】:
我有一个带有一些测试的 Maven 项目(Selenium + Java + Junit + Cucumber)
测试在我的本地主机中正确运行。
我尝试在 Gitlab CI 中运行这些测试。我在项目的根目录中创建了.gitlab-ci.yml:
image: markhobson/maven-chrome:jdk-16
stages:
- build
- test
variables:
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
build:
stage: build
script:
- mvn $MAVEN_OPTS clean package
- mvn compile
test:
stage: test
script:
- mvn test
我的一段带有 WebDriver 的 java 代码:
public static void setUp() {
System.setProperty(getChromeProperty(), getUserDirectory() + "/src/test/resources/drivers/chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.IGNORE);
chromeOptions.setCapability("requireWindowFocus", true);
chromeOptions.addArguments("start-maximized");
chromeOptions.setHeadless(true);
driver = new ChromeDriver(chromeOptions);
}
当我在 Gitlab CI 中运行它时,我在构建阶段遇到错误:
"[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 4.106 s <<< FAILURE! - in runners.TestRunner
[ERROR] Login #6.ALT_1 TestCase_1 Time elapsed: 1.352 s <<< ERROR!
java.lang.IllegalStateException: The driver is not executable: /builds/ALT-Tests/MyApp/src/test/resources/drivers/chromedriver.exe
我该如何解决这个问题? docker中/builds目录的驱动隐藏了吗?
【问题讨论】:
-
首先将步骤
compile和test分开在Maven 中没有意义。此外,如果您尝试执行适用于 Windows 的文件 (chromedriver.exe),则假定您有一个可用的操作系统可以执行该文件。正如您所提到的,您在 Docker 中运行...这些 docker 图像是 Windows 图像吗?您是否在 Windows 系统上运行? -
您在 linux 映像上运行 selenium,因此 .exe 将无法工作。另外,文档明确指出您需要在
headless模式下运行。 -
@aksappy:和你写的完全一样。我该如何处理?
-
对不起,我没有看到你在后面的代码中设置了无头选项。您可以将 chrome 驱动程序设置为
/usr/bin/chromedriver而不是您正在使用的 .exe 文件吗? docker 镜像已经捆绑了它。 -
@aksappy, khmarbaise:好的,当我将源 chrome 驱动程序更改为:/usr/bin/chromedriver 时,一切都只能在 .gitlab-ci.yml 上完美运行。使用源代码:getUserDirectory() + "/src/test/resources/drivers/chromedriver.exe" 一切仅适用于 Windows。我需要一个条件来识别系统并选择适当的驱动程序路径。最好的方法是什么?在哪里添加它?在 .gitlab-ci.yml 文件中还是在我的 Java 代码中?
标签: java docker selenium maven gitlab-ci