java - 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 教程中所述)以上传文件。
- 在 Windows 上进行本地测试时效果很好
- 在 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) (警告:服务器没有提供任何堆栈跟踪信息)
这很奇怪,因为我确定给定目录中存在文件(在我上面的方法中,我正在检查文件是否存在并且日志清楚地确认了这一点)
欢迎任何建议,谢谢
解决方案
因为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);
}
推荐阅读
- r - 包含多个变量的箱线图?/ 小提琴情节?
- php - 编写 MySQL 查询以在 PHP 中获取数组组并输出为 JSON
- javascript - 如何在 JavaScript 中生成随机数作为数组的对象
- sql - SQL/Oracle 仅返回第二列中具有相同值的字段
- ios - 调用建立时更改本地视图和远程视图的位置(SINCH swift项目)
- android - 适用于 Android 的地方 SDK
- mysql - 根据日期查找差异
- android - RxJava 2 适配器工厂
- python - 如何将字符串传递给xpath?
- c++ - OpenCV Cuda alphaComp,反复混合0图像使其变暗