【问题标题】:unable to run selenium test cases on docker container无法在 docker 容器上运行 selenium 测试用例
【发布时间】:2019-09-13 13:52:25
【问题描述】:

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

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 网格在 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 代码如下

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 容器相同的测试用例会失败。

【问题讨论】:

  • 指针的一对——不应在单个 Dockerfile 中有两个 FROM 语句,其次——不要尝试以 Root 身份运行。建议不要以root身份运行。
  • 你能不能试着把localhost改成0.0.0.0(运行docker镜像时有几个localhost很容易混淆)并重新检查端口(由于某种原因端口4446被链接了)到图片的4444端口selenium/hub)

标签: java docker selenium-grid


【解决方案1】:

使用headless 选项运行chromedriver。我之前遇到过同样的问题,现在解决了。

chrome_options.add_argument("--headless")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-01
    • 2020-09-14
    • 2020-04-22
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多