-1

我正在使用 Selenium WebDriver 进行自动化。在 WebDriver 中上传文件只需在文件输入字段上使用 sendKeys() 方法即可完成。

代码片段:

WebElement uploadElement = driver.findElement(By.id("uploadfile"));

// enter the absolute file path into the file input field
uploadElement.sendKeys("C:\\test.txt");

当脚本执行在本地机器上运行时,上面的代码片段按预期工作。但是当脚本执行在 Zalenium docker 容器上运行时,它不起作用。

4

2 回答 2

0

这对我有用。无需安装卷即可完成此操作

File file = new File(filePath); //my local filepath where the file will be created
        File tempDir = new File(System.getProperty("java.io.tmpdir", null), "uploadFile");
        if (!tempDir.exists()) {
            tempDir.mkdir();
        }
        File fileToCreate = new File(tempDir, file.getName());
        byte[] bytes = Base64.getDecoder().decode(value.getBytes());
        FileUtils.writeByteArrayToFile(fileToCreate, bytes);
        Thread.sleep(3000);
        RemoteWebDriver remoteDriver = new RemoteWebDriver(
                        new URL("http://localhost:4444/wd/hub"), capabilities);
        remoteDriver.setFileDetector(new LocalFileDetector());
        remoteDriver.findElement(locator).sendKeys(fileToCreate.toString());
于 2020-06-24T05:21:59.333 回答
0

文件上传相对来说非常简单,但在使用 Docker 概念时略有不同。您需要确保为要上传的文件(使用LocalFileDetector类)设置文件检测器。

参考下面的代码片段:

WebElement uploadElement = driver.findElement(By.id("uploadfile"));

LocalFileDetector detector = new LocalFileDetector();
File localFile = detector.getLocalFile("C:\\test.txt");

uploadElement.setFileDetector(detector);

// enter the absolute file path into the file input field
uploadElement.sendKeys(localFile.getAbsolutePath());

上面的代码片段将在本地/远程/Zalenium docker 容器上执行脚本时上传文件。

于 2020-05-07T12:35:57.473 回答