【问题标题】:Run selenium tests in Gitlab-CI (maven and java)在 Gitlab-CI(maven 和 java)中运行 selenium 测试
【发布时间】: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目录的驱动隐藏了吗?

【问题讨论】:

  • 首先将步骤compiletest 分开在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


【解决方案1】:

好的,我已经回答了我的问题。

总结一下:

  • 在本地我在 Windows 系统上运行我的测试
  • Gitlab CI 在 Docker 上运行:Linux 系统

我有 ChromeDriver 的硬编码路径(这是问题):

   System.setProperty(getChromeProperty(), getUserDirectory() + "/src/test/resources/drivers/chromedriver.exe");

解决:

  • 在 Windows 上,我添加了新的环境变量。变量名:WEBDRIVER,变量值:C:\Users\test\IdeaProjects\myProject\src\test\resources\drivers\chromedriver.exe

  • 在我的 java 代码中,我更改了 Chrome 驱动程序的路径(从环境变量中读取)

    System.setProperty(getChromeProperty(), System.getenv("WEBDRIVER"));

Windows 已完成。

为了在 linux 上运行,我在 .gitlab-ci.yml 文件中添加了:

    before_script:
      - export WEBDRIVER="/usr/bin/chromedriver"

一切正常 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2015-10-24
    • 2014-07-07
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多