![](/img/trans.png)
[英]Docker & Selenium-Java :- Unable to upload Image/file in chrome browser running on a docker container
[英]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.