python-3.x - 如何在 docker 中运行 selenium+pytest?

标签 python-3.x docker selenium docker-compose

我是 docker 的新手,所以我在尝试在其中运行 selenium 测试时遇到了问题。 我知道我需要使用网格或独立运行 selenium 服务器并且它工作正常,但是我如何通过 docker 运行我的测试(docker run mytest:1.0)?我不断收到诸如“urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=4444): Max retries exceeded with url:/wd/hub/session”之类的错误,但是如果我在本地运行测试机器 - 它工作正常。

docker 文件:

FROM python:3.8
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . /tests
WORKDIR /tests
CMD [ "pytest", "-vv", "-s", "test_selenium.py" ]

Docker-compose.yaml:

version: "3"
services:
  chrome:
    image: selenium/node-chrome:4.0.0-rc-1-prerelease-20210823
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
    ports:
      - "7900:7900"

  selenium-hub:
    image: selenium/hub:4.0.0-rc-1-prerelease-20210823
    container_name: selenium-hub
    ports:
      - "4442:4442"
      - "4443:4443"
      - "4444:4444"

我的驱动程序在 test_file 中初始化:

driver = webdriver.Remote('http://localhost:4444/wd/hub', desired_capabilities=DesiredCapabilities.CHROME)

最佳答案

您的 docker-compose.yaml 应该只启动与您要在服务器上启动的浏览器相同的 selenium 服务器和节点。

version: '3'
services:
  chrome:
    image: selenium/node-chrome:latest
    shm_size: 2gb
    networks:
      - selenium
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
    ports:
      - '7900:7900'

  selenium-hub:
    image: selenium/hub:latest
    container_name: selenium-hub
    networks:
      - selenium
    ports:
      - '4442:4442'
      - '4443:4443'
      - '4444:4444'

networks:
  selenium:
    name: selenium

您的 Dockerfile 中不需要任何更改。

test_file 中的驱动程序初始化应如下所示:

driver = webdriver.Remote('http://localhost:4444/wd/hub', options=webdriver.ChromeOptions())

注意 options 的用法,因为 desired_capabilities is deprecated .

进行上述更改后,按顺序运行以下命令:

  1. docker-compose up
  2. docker run --network "host"selenium_test:1.0

关于python-3.x - 如何在 docker 中运行 selenium+pytest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68933811/

相关文章:

java - selenium/eclipse 中的数据驱动测试。作业本错误?

python - pandas multiindex - 根据子索引的数量删除行

python - 无法从我的脚本中消除硬编码延迟以获得准确的结果

python -/usr/bin/env : python3. 3: chroot 内没有这样的文件或目录

docker run <图像> <多个命令>

java - WebDriver等等。快速检查元素是否存在

java - 如何使用 JAVA 创建 Tomcat keystore 文件

python : Right Shift >> 26

docker - 在 docker 云容器中运行 cronjob 或任务

docker - 亚马逊ECS上的容器运输