首页 > 解决方案 > 有没有办法在无头铬中使用硒上传文件?

问题描述

我正在创建一个需要我上传文件的脚本,所以我写了如下内容:

    @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;并且两者仍然无效

标签: javaseleniumgoogle-chrome-headlessserenity-bdd

解决方案


它不起作用,因为您正在使用一个Robot类,这对于无头执行来说并不理想,因为浏览器无论如何都不可见。

确保您的上传元素可见。

之后,您使用以下内容上传:

driver.findElement(By.id("uploadElement")).sendKeys("path/to/file");

推荐阅读