Невозможно установить chromedriver на док-машину с помощью Webdrivermanager - PullRequest
0 голосов
/ 03 апреля 2019

Я использую плагин webdrivermanager от Boni Garcia для установки драйвера. Когда я использую его для выполнения на своем локальном компьютере, и все работает нормально, но у меня возникают проблемы, когда я пытаюсь сделать то же самое с помощью Jenkins. Подробности ниже:

        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>3.3.0</version>
        </dependency>

Теперь, когда я пытаюсь выполнить тот же проект Maven через Jenkins, я сталкиваюсь с проблемой. Моя подчиненная машина - это докер.

Сначала я попробовал webdrivermanager позаботиться об установке драйвера chrome, и я получил сообщение о том, что двоичный файл не найден.

ChromeOptions options = new ChromeOptions();
options.addArguments("headless");
options.addArguments("start-maximized");
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver(options);

Ошибка:

org.openqa.selenium.WebDriverException: 
unknown error: cannot find Chrome binary
  (Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Linux 3.10.0-862.14.4.el7.x86_64 x86_64) (WARNING: The server did not provide any stacktrace information)

Затем я попытался использовать драйвер изнутри. Я сохранил файл chromedriver в папке драйверов в моей структуре и затем попытался выполнить его, но все равно получил ошибку (на этот раз другая ошибка)

    ChromeOptions options = new ChromeOptions();
    options.addArguments("headless");
    options.addArguments("start-maximized");
    System.setProperty("webdriver.chrome.driver", "src/test/resources/drivers/chromedriver");
    driver = new ChromeDriver(options);

Ошибка:

      Running TestSuite
/home/jenkins/workspace/Dental_EIEI_Angular/EIEI Test Jenkins/src/test/resources/drivers/chromedriver: /home/jenkins/workspace/Dental_EIEI_Angular/EIEI Test Jenkins/src/test/resources/drivers/chromedriver: cannot execute binary file
Apr 03, 2019 2:19:23 PM org.openqa.selenium.os.OsProcess checkForError
SEVERE: org.apache.commons.exec.ExecuteException: Process exited with an error: 126 (Exit value: 126)

1 Ответ

1 голос
/ 03 апреля 2019

Я столкнулся с проблемой, похожей на ту, с которой вы столкнулись. WebDriverException : unknown error: cannot find Chrome binary - потому что ваша структура не может найти хромовый бинарный файл в jenkins. Чтобы установить двоичный файл с помощью вашего кода, не делится, потому что вы должны знать путь двоичного файла. Вместо того, чтобы ввязываться в эту проблему, просто создайте файл docker-compose.yml, чтобы запустить вашу инфраструктуру и выполнить ваши тесты.

version: "3"
services:
  selenium-hub: 
    image: selenium/hub
    container_name: selenium-hub
    ports: 
      - "4444:4444"
    environment:
      - GRID_BROWSER_TIMEOUT=30
  chrome:
    image: selenium/node-chrome
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
  firefox:
    image: selenium/node-firefox
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444

, затем вы можете использовать docker-compose up -d для запуска вашего инфра-режима в отдельном режиме. Вам также необходимо внести некоторые соответствующие изменения в свой код, чтобы получить доступ к серверу selenium-hub.

System.setProperty("webdriver.chrome.driver", "src//test//resources//driver//chromedriver");
                ChromeOptions cap = new ChromeOptions();
                cap.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.IGNORE);
                webDriver = new RemoteWebDriver(new URL("http://"+serverIP+":4444/wd/hub"), cap);
                webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);

, где serverIP - это localhost, если вы хотите запустить приложение в своей локальной системе или если вы хотите запустить его в jenkins, вам нужен IP-адрес сервера selenium-hub, который можно найти, запустив docker inspect на Дженкинса

...