java - 有没有办法在无头铬中使用硒上传文件?
问题描述
我正在创建一个需要我上传文件的脚本,所以我写了如下内容:
@FindBy(css = "div[title='Add an attachment'] button")
private WebElementFacade FILE_UPLOAD_BUTTON;
Path path = Paths.get(System.getProperty("user.dir"));
withTimeoutOf(20, TimeUnit.SECONDS).waitFor(ExpectedConditions.visibilityOf(FILE_UPLOAD_BUTTON));
FILE_UPLOAD_BUTTON.click();
filePath = Paths.get(path.toString(), "FolderName", "ActualFileName.pdf");
StringSelection fullPath = new StringSelection(filePath.toString());
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(fullPath, fullPath);
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
pause(2000);
它工作正常,但在 Headless chrome 中却不行。关于如何在 Headless chrome 中上传文件的任何想法?TIA。
编辑:增加了对 serenity 的询问,wakaleo 怀疑 Robot 类将在 headless chrome 上工作,因为它与真实的 UI 交互。我还尝试了他的建议,使用标准硒操作,例如chord org.openqa.selenium.Keys;
andactions org.openqa.selenium.interactions.Actions;
并且两者仍然无效
解决方案
它不起作用,因为您正在使用一个Robot
类,这对于无头执行来说并不理想,因为浏览器无论如何都不可见。
确保您的上传元素可见。
之后,您使用以下内容上传:
driver.findElement(By.id("uploadElement")).sendKeys("path/to/file");
推荐阅读
- python - 如何将多个 Pandas 数据框写入 Excel?(当前方法损坏 .xlsx)
- flutter - Flutter 获取 mysql 数据库值
- html - 我在 Gmail 中打开时重复的 HTML 电子邮件背景图像
- node.js - 使用机器人直接将文件下载到电报
- regex - Alteryx - 将长度不确定的字符串拆分为每列 5 个字符
- php - fgetcsv 编码问题 (PHP)
- graphql - 尝试在 AWS AppSync 中删除时出错
- javascript - 如何隐藏 R markdown 中的代码语句?
- git - 如何在不丢失更改的情况下重置分支的所有提交?
- flutter - 如何调用 LogicalKeyboardKey.cut/copy/paste