在 docker 中运行的 selenium 出现连接拒绝错误

And*_*ayi 4 selenium docker yarnpkg

在尝试使用 selenium docker 映像“selenium/standalone”进行 dockerise selenium End2End 测试时,我收到错误:从 selenium 服务器检索新会话时出错连接被拒绝!硒服务器启动了吗?是的,selenium 服务器根据控制台输出启动......有什么想法吗?

FROM selenium/standalone-chrome
USER root
# installing node
RUN apt-get update
RUN apt-get install -y curl
RUN curl -sL https://deb.nodesource.com/setup_7.x | bash
RUN apt-get install -y nodejs  
RUN node -v
RUN npm -v
# Installing Yarn
#RUN rm -r /usr/local/bin/yarn
RUN npm install -g -y yarn
ENV PATH $PATH:/usr/local/bin/yarn
#copying files
WORKDIR /app
COPY . .
# debug
RUN ls -alh .
#installing yarn
RUN yarn install 
EXPOSE 4444
RUN yarn
CMD yarn test
Run Code Online (Sandbox Code Playgroud)

Tar*_*ani 5

问题是你解决这个问题的方法。查看您继承的图像,selenium/standalone-chrome该图像应该运行 Selenium 浏览器。现在,您正在此图像中添加测试并指定 CMD 来运行测试。

当您构建并启动此映像时,您不会获得任何浏览器,因为您已覆盖 CMD 来运行测试。当我们在 docker 中构建时,我们将依赖的服务保存在不同的容器中。大多数情况下,最好每个容器运行 1 个服务/进程。在您的情况下,当测试运行时,浏览器服务器进程丢失,因此这就是连接被拒绝的原因。

所以你需要在这里运行两个容器。一份用于测试selenium/standalone-chrome,一份用于您的测试。

此外,您的图像应该继承自 node: 而不是来自 selenium chrome 图像。在构建图像时,您不应该同时使用node -vnpm -v命令。它们会在您的最终图像中创建额外的图层

FROM node:7
USER root
# installing node
RUN apt-get update && apt-get install -y curl
# Installing Yarn
RUN npm install -g -y yarn
ENV PATH $PATH:/usr/local/bin/yarn
#copying files
WORKDIR /app
COPY . .
# debug
#installing yarn
RUN yarn install 
RUN yarn
CMD yarn test
Run Code Online (Sandbox Code Playgroud)

现在您需要创建一个 docker-compose 文件来运行包含测试和 chrome 的组合

version: '3'
services:
  chrome:
    image: selenium/standalone-chrome
  tests:
    build: .
    depends_on:
      - chrome
Run Code Online (Sandbox Code Playgroud)

安装docker-compose并运行docker-compose up命令来运行上述组合。另外,在您的测试中,请确保使用 URL 作为http://chrome:4444/wd/hub并使用远程网络驱动程序,而不是本地驱动程序。