簡體   English   中英

Docker Selenium 獨立服務器無法將文件上傳到容器中的網格瀏覽器

[英]Docker Selenium standalone server is Unable to upload a file to the grid browser in the container

我有一個 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

您將卷安裝到運行測試代碼的容器中。 但是,您需要將卷安裝到運行瀏覽器的容器中。

問題是,當您的代碼對 web 應用說“嘿,這是您需要上傳的文件”時,測試代碼發送的不是文件本身,而是傳遞給瀏覽器的路徑。 然后瀏覽器嘗試查找該文件並向服務器構建適當的請求。

所以文件必須在瀏覽器運行的容器內。

您需要添加路徑配置。 創建一個文件 browsers.json 在那里添加這個腳本

{

“chrome”:{“默認”:“85.0”,“版本”:{“85.0”:{“圖像”:“selenoid / vnc:chrome_85.0”,“端口”:“4444”,“卷”:[ “/home/ubuntu/你的項目:/opt/docker”] } } } }

並使用這個 --browsers-json browsers.json 參數運行

此示例適用於 selenoid,但如果您不使用 selenoid,只需將此 "volumes": ["/home/ubuntu/your-project:/opt/docker"] 添加到您的 selenium 網格配置中。

謝謝大家的回答,所以我找到的工作解決方案有兩個,一個是@Alexey 提到的我還應該將我的腳本文件夾 map 卷到 selenium 容器以及下面:

selenium:
   volumes :
     - .:/workspace

上面是一個面向 docker 的解決方案,我發現的另一個是 selenium 網格,其中網格可以使用文件檢測器檢測文件,可以通過添加以下代碼片段來完成。

remoteDriver.setFileDetector(new LocalFileDetector());

這兩種解決方案都有效並且解決了我的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM