无法使用Webdrivermanager在docker机器上安装chromedriver

时间:2019-04-03 17:57:20

标签: maven docker selenium-chromedriver webdrivermanager-java

我正在使用Boni Garcia的webdrivermanager插件进行驱动程序安装。当我使用它在本地执行时,一切正常,但是当我尝试通过Jenkins进行操作时,我遇到了问题。详细信息如下:

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

现在,当我尝试通过Jenkins执行相同的Maven项目时,我面临着问题。我的从属机器是docker机器。

起初,我尝试使用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文件保存在框架内的drivers文件夹中,然后尝试执行该文件,但仍然出现错误(不过这次还是不同的错误)

    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 个答案:

答案 0 :(得分:1)

我遇到了一个与您面临的问题类似的问题。 WebDriverException : unknown error: cannot find Chrome binary是因为您的框架无法在jenkins中找到chrome二进制文件。使用代码设置二进制文件是不可行的,因为您应该知道二进制文件的路径。无需麻烦,只需创建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);

其中serverIPlocalhost,如果要在本地系统中运行该应用程序,或者要在jenkins中运行该应用程序,则需要selenium-hub服务器的IP地址,该IP地址可以是通过在詹金斯上运行docker inspect找到