有没有办法在无头镀铬中使用selenium上传文件?

问题描述 投票:0回答:3

我正在创建一个要求我上传文件的脚本,所以我写了类似的东西:

    @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上进行文件上传的任何想法? TIA。

编辑:添加了inquiry to serenity和wakaleo怀疑Robot类将在无头镀铬上工作,因为它与真实UI交互。我也试过他的建议使用标准的Selenium动作,如chord org.openqa.selenium.Keys;actions org.openqa.selenium.interactions.Actions;,两者仍然不起作用

java selenium google-chrome-headless serenity-bdd
3个回答
1
投票

你可以使用AutoIt和它的编辑器在selenium上传文件

1.您需要安装Autoit及其脚本编辑器

我已共享该链接,您可以下载并使用它

https://www.autoitscript.com/site/autoit/downloads/

  1. 你需要创建自动文件,需要传递文件位置和一些脚本,并根据需要命名文件,就像我已经给出File Upload.au3,.au3扩展自动 ControlFocus("Open","","Edit1") ControlSetText("Open","","Edit1","E:\AutoIT\id.pdf") ControlClick("Open","","Button1")
  2. 你需要右键单击文件upload.au3文件并编译它然后它将创建执行文件File Upload.exe
  3. 然后你需要在selenium中指定你需要执行和上传文件,就像在我的项目中点击上传按钮后我正在使用Runtime.getRuntime().exec(Globals.PROG_FILEUPLOAD);执行此文件

其中Global.PROG_FILEUPLOAD是File Upload.exe的路径

PROG_FILEUPLOAD= "E:/AutoIT/File Upload.exe"

如果您有任何疑问,我也分享了您可以使用的参考链接

https://www.guru99.com/use-autoit-selenium.html


1
投票

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

确保您的上传元素可见。

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

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

0
投票

使用以下代码以无头模式上传文件:

    ChromeOptions options = new ChromeOptions();
            options.addArguments("--headless");
            WebDriver driver = new ChromeDriver(options);
            driver.get("http://nervgh.github.io/pages/angular-file-upload/examples/simple/");
            driver.findElement(By.xpath("(//input[@uploader='uploader'])[2]")).sendKeys("C:\\NotBackedUp\\Python\\selenium-2.7.0\\py\\selenium\\selenium.py");
// Then click on some upload button

在sendKeys()方法中提供要上载的文件的完整路径。

© www.soinside.com 2019 - 2024. All rights reserved.