在尝试使用 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/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
并使用远程网络驱动程序而不是本地驱动程序。
为了有效运行您的 Selenium 自动化解决方案,我建议您现在使用 Selenium 网格,它使您能够创建 Selenium Hub 并将不同的节点(浏览器)附加到网格。下面是硒网格如何工作的图示
创建一个精简的 Docker 容器。您还需要两个文件。
这是 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
我使用了 selenium/node-chrome 图像,但解决这个问题的方法是确保我的 chromedriver + selenium 服务器 + nightwatch 在我的 package.json 中设置为最新版本
尝试在docke-compose中将
SE_ENABLE_TRACING
的环境设置为false
。
使用命令行与 docker run 的示例:
-e SE_ENABLE_TRACING=false