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

问题描述 投票:0回答:4

在尝试使用 selenium docker 映像“selenium/standalone”进行 dockerise selenium End2End 测试时,我收到错误:从 selenium 服务器检索新会话时出错连接被拒绝!硒服务器启动了吗? ye 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
selenium docker yarnpkg
4个回答
5
投票

问题在于你解决这个问题的方法。请注意,您正在从

selenium/standalone-chrome
继承图像,该图像应该运行 Selenium 浏览器。现在,您正在此图像中添加测试并指定 CMD 来运行测试。

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

所以你需要在这里运行两个容器。一份用于

selenium/standalone-chrome
,一份用于您的测试。

您的图像还应该继承自 node: 而不是来自 selenium chrome 图像。在构建图像时,您不应该使用

node -v
npm -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

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

version: '3'
services:
  chrome:
    image: selenium/standalone-chrome
  tests:
    build: .
    depends_on:
      - chrome

安装

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


1
投票

为了有效运行您的 Selenium 自动化解决方案,我建议您现在使用 Selenium 网格,它使您能够创建 Selenium Hub 并将不同的节点(浏览器)附加到网格。下面是硒网格如何工作的图示 Selenium Grid

创建一个精简的 Docker 容器。您还需要两个文件。

  • Dockerfile
  • docker-compose.yml

这是 Dockerfile 的更新版本

   FROM node:20-slim
   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 /usr/src/app
   COPY . .

   # debug
   #installing yarn
   RUN yarn install 
   RUN yarn
   CMD yarn test

***这是你的 docker-compose.yml ***

    version: "3.10"
services:

  selenium-hub:
    image: selenium/hub:latest
    container_name: selenium-hub
    ports:
      - "4444:4444"
      - "4442:4442"
      - "4443:4443"
    volumes:
      - mydata:/app/data
  


  ChromeService-docu:
    image: selenium/node-chrome:latest
    shm_size: "2gb"
    ports:
      - "5900"  
      - "7900"
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
      - SE_NODE_MAX_SESSIONS=2
    depends_on:
      - selenium-hub
  
  docu-api:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - selenium-hub
    volumes:
      - mydata:/app/data

volumes:
  mydata:

这样可以确保您正确设置 Selenium 网格配置并启动精简的 Docker 资源。要运行容器,您可以使用下面的命令

docker-compose up --build

0
投票

我使用了 selenium/node-chrome 图像,但解决这个问题的方法是确保我的 chromedriver + selenium 服务器 + nightwatch 在我的 package.json 中设置为最新版本


0
投票

尝试在docke-compose中将

SE_ENABLE_TRACING
的环境设置为
false

使用命令行与 docker run 的示例:

-e SE_ENABLE_TRACING=false

© www.soinside.com 2019 - 2024. All rights reserved.