首页 > 解决方案 > Selenium 上传文件:找不到文件 [docker]

问题描述

我有以下使用硒上传图像的方法。

public static void uploadSampleImage(StaticSeleniumDriver driver)
{
    File file = new File(System.getProperty("user.dir") + "/resources/images/" + SAMPLE_DOCUMENT_FILE_NAME);
    Utils.Log("file exists: " + file.exists());

    String imagePath = file.getAbsolutePath();
    WebElement input = driver.findElement(By.name("file"));
    input.sendKeys(imagePath);
}

这是提供文件路径的标准方式(如 Guru99 教程中所述)以上传文件。

  1. 在 Windows 上进行本地测试时效果很好
  2. 在 docker 容器(linux)中运行时它不起作用,出现此错误:

org.openqa.selenium.InvalidArgumentException:无效参数:找不到文件:/usr/src/app/resources/images/image2.png(会话信息:chrome=72.0.3626.81)(驱动程序信息:chromedriver=2.46.628388(4a34a70827ac54148e092aafb70504c4ea7ae926 ),platform=Linux 4.9.125-linuxkit x86_64) (警告:服务器没有提供任何堆栈跟踪信息)

这很奇怪,因为我确定给定目录中存在文件(在我上面的方法中,我正在检查文件是否存在并且日志清楚地确认了这一点)

在此处输入图像描述

欢迎任何建议,谢谢

标签: javaseleniumdocker

解决方案


因为RemoteWebDriver你必须设置文件检测器driver.setFileDetector(new LocalFileDetector());。你的代码:

public static void uploadSampleImage(StaticSeleniumDriver driver)
{
    driver.setFileDetector(new LocalFileDetector());
    File file = new File(System.getProperty("user.dir") + "/resources/images/" + SAMPLE_DOCUMENT_FILE_NAME);
    Utils.Log("file exists: " + file.exists());

    String imagePath = file.getAbsolutePath();
    WebElement input = driver.findElement(By.name("file"));
    input.sendKeys(imagePath);
}

推荐阅读