【问题标题】:Docker Selenium standalone server is Unable to upload a file to the grid browser in the containerDocker Selenium 独立服务器无法将文件上传到容器中的网格浏览器
【发布时间】:2021-03-14 05:50:20
【问题描述】:

我有一个用于上传附件的 selenium 脚本,可以在 maven 和 java 上运行,并且在本地运行时工作正常。

当我使用 selenium 独立服务器在 docker 容器上运行它时,会收到以下异常

org.openqa.selenium.InvalidArgumentException: invalid argument: File not found :

不确定如何在容器内解决,我已验证文件可用

我使用的docker compose文件如下:

    version : '3'
services :
  maven:
    container_name : Maven-Java
    image : maven:3.5.3-jdk-8-alpine
    volumes :
      - .:/workspace
      - ~/.m2:/root/.m2
    depends_on :
      - selenium
    command : mvn -f /workspace test
  selenium:
    container_name : selenium
    image : selenium/standalone-chrome:latest
    volumes:
      - /dev/shm:/dev/shm
    ports :
      - 4444:4444

【问题讨论】:

  • 您说您已验证文件可用。您是否验证了该文件在 docker 容器中可用?
  • 我打印了该特定位置的可用文件。并且从日志中验证文件可用,但驱动程序无法上传。
  • 在 docker 容器上运行它是什么意思? Docker 容器作为枢纽?
  • Docker 容器文件系统与主机系统隔离。因此,您不能只在 docker 中运行脚本并期望它会访问您主机上的任何内容。您需要将主机上的文件夹挂载到容器内的文件夹或将文件复制到容器文件系统(构建要运行的映像时会采用这两个选项)。
  • @PDHide,我使用 selenium 独立 chrome 在 docker 中运行,您可以在此处找到相关信息 github.com/SeleniumHQ/docker-selenium#standalone

标签: java docker selenium


【解决方案1】:

您将卷安装到运行测试代码的容器中。但是,您需要将卷挂载到运行浏览器的容器中。

问题是,当您的代码对网络应用说“嘿,这是您需要上传的文件”时,测试代码发送的不是文件本身,而是传递给浏览器的路径。然后浏览器尝试查找该文件并向服务器构建适当的请求。

所以文件必须在浏览器运行的容器中。

【讨论】:

  • 浏览器是由容器使用 selenium 网格启动的,正如你在上面看到的,我已经将我的测试脚本文件夹映射到 selenium 容器,除了上传文件之外,所有其他测试都在运行,所以我我认为这更像是一个硒问题而不是 docker
  • 不,你没有映射。您将其映射到container_name : Maven-Java。不要container_name : selenium
  • 好的,现在明白了,但是我能否将同一个文件夹映射到多个容器@Alexey R.
  • 我相信你会的
  • 谢谢@Alexey R,你说得对,它对我有用,还找到了一个不映射卷的替代方法
【解决方案2】:

您需要添加路径配置。 创建文件 browsers.json 在此处添加此脚本

{

“铬”:{ “默认”:“85.0”, “版本”:{ “85.0”:{ "图像": "selenoid/vnc:chrome_85.0", “端口”:“4444”, “卷”:[“/home/ubuntu/your-project:/opt/docker”] } } } }

并使用 --browsers-json browsers.json 参数运行

此示例适用于 selenoid,但如果您不使用 selenoid,只需将此“volumes”:[“/home/ubuntu/your-project:/opt/docker”] 添加到您的 selenium 网格配置中。

【讨论】:

  • 不,我没有使用 Selenoid,我在我的主机中使用 windows,所以在使用 chrome 独立服务器运行的 docker 容器中,不确定卷映射
【解决方案3】:

谢谢大家的回答,所以我找到的工作解决方案是两个,正如@Alexey 提到的,我还应该将我的脚本文件夹卷映射到硒容器以及以下:

selenium:
   volumes :
     - .:/workspace

上面是一个面向 docker 的解决方案,我发现的另一个是 selenium 网格,其中网格可以使用文件检测器检测文件,可以通过添加以下片段来完成。

remoteDriver.setFileDetector(new LocalFileDetector());

这两种解决方案都有效并且解决了我的问题。

【讨论】:

    猜你喜欢
    • 2021-09-17
    • 1970-01-01
    • 2017-06-29
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 2018-07-09
    • 1970-01-01
    相关资源
    最近更新 更多