java - 无法在 docker 容器上运行 selenium 测试用例

标签 java docker selenium-grid

我已经设置了一个 Selenium 网格和 selenium chrome 节点作为 docker 容器,并为我的测试套件创建了一个容器。 但是一旦我尝试运行测试用例,它就无法提供以下错误消息

org.openqa.selenium.remote.UnreachableBrowserException: 
Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
Build info: version: '3.141.5', revision: 'd54ebd709a', time: '2018-11-06T11:42:16'
System info: host: '267891a44849', ip: '172.17.0.3', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.184-linuxkit', java.version: '11.0.4'
Driver info: driver.version: RemoteWebDriver
Caused by: java.net.ConnectException: Failed to connect to localhost/127.0.0.1:4444
Caused by: java.net.ConnectException: Connection refused (Connection refused)

通过 docker 文件为我的自动化代码创建了 docker 镜像

创建了一个docker网络

使用 selenium grid 在 docker 上创建了一个集线器

链接节点到此中心

并尝试运行代码

我的 Dockerfile 用于为自动化代码创建镜像

FROM node AS chrome
USER root
WORKDIR /home/app
RUN apt-get install unzip && \
    wget https://chromedriver.storage.googleapis.com/77.0.3865.40/chromedriver_linux64.zip && \
    unzip chromedriver_linux64.zip && \
    chmod +x /home/app/chromedriver

FROM maven:3.6.2-jdk-11-slim
COPY src /home/app/src
COPY pom.xml /home/app
COPY Dockerfile /home/app
WORKDIR /home/app
COPY --from=chrome /home/app/chromedriver /home/app
RUN chmod u+x chromedriver
ENTRYPOINT mvn clean test

我还可以看到 docker hub 和 node up for selenium

$ docker ps -a
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                    NAMES
e95780aac878        selenium/node-chrome   "/opt/bin/entry_poin…"   29 hours ago        Up 29 hours                                  selenium-node
7e23e59006fb        selenium/hub           "/opt/bin/entry_poin…"   29 hours ago        Up 29 hours         0.0.0.0:4446->4444/tcp   selenium-hub

我的SetUp.java contians代码如下

String nodeURL= "http://localhost:4446/wd/hub";
ChromeOptions remoteOptions = new ChromeOptions();
driver=new RemoteWebDriver(new URL(nodeURL), remoteOptions);

但在执行时

$ docker run --rm -e SELENIUM_HUB=selenium-node --network grid <my automaiotn code image>

我遇到以下错误

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running Parallel01IT
inside after

Failed scenarios:
/home/app/src/test/java/features/NonRes.feature:49 

1 Scenarios (1 failed)
3 Steps (1 failed, 2 skipped)
2m0.810s

org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
Build info: version: '3.11.0', revision: 'e59cfb3', time: '2018-03-11T20:26:55.152Z'
System info: host: '61da76b392d3', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.184-linuxkit', java.version: '1.8.0_212'
Driver info: driver.version: RemoteWebDriver
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:566)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:209)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:132)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:145)


org.openqa.selenium.remote.UnreachableBrowserException: 
Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
Build info: version: '3.11.0', revision: 'e59cfb3', time: '2018-03-11T20:26:55.152Z'
System info: host: '61da76b392d3', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.184-linuxkit', java.version: '1.8.0_212'
Driver info: driver.version: RemoteWebDriver
Caused by: java.net.SocketTimeoutException: connect timed out

但是当我从本地 [我的笔记本电脑] 在那些 docker selenium 网格容器上运行相同的测试用例时,它工作正常 然而,运行与 Docker 容器相同的测试用例失败。

最佳答案

使用 headless 选项运行 chromedriver。我以前也遇到过同样的问题,这解决了它。

chrome_options.add_argument("--headless")

关于java - 无法在 docker 容器上运行 selenium 测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57924931/

相关文章:

java - Java 的国际化

docker - 如何理解Docker构建过程提供的输出?

selenium - Selenium WebDriver 可以在后台静默打开浏览器窗口吗?

java - 组合发电机

java - 使用 SimpleXml 无法解析日期

java - 如何在 JTextArea 中换行

android - 选择 selenium grid2 上的特定节点来运行测试

docker - 基本操作系统镜像是否曾经包含Linux内核?

java - 不允许主机 '172.23.0.9' 连接到此 MariaDB 服务器

internet-explorer - Selenium 网格 : queue size of the Hub?