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

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


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


慕标5832272
浏览 222回答 3
3回答

慕田峪4524236

它不起作用,因为您正在使用一个Robot类,这对于无头执行来说并不理想,因为浏览器无论如何都不可见。确保您的上传元素可见。之后,您使用以下内容上传:driver.findElement(By.id("uploadElement")).sendKeys("path/to/file");

鸿蒙传说

AutoIt您可以使用它的编辑器在 selenium 中上传文件1.您需要安装Autoit及其脚本编辑器我已经分享了链接,您可以下载并使用它https://www.autoitscript.com/site/autoit/downloads/您需要创建 autoit 文件并需要传递文件位置和一些脚本,并根据需要命名文件,就像我给 File Upload.au3 一样,.au3 扩展名是自动的ControlFocus("Open","","Edit1") ControlSetText("Open","","Edit1","E:\AutoIT\id.pdf") ControlClick("Open","","Button1")您需要右键单击文件upload.au3文件并对其进行编译,然后它将创建执行文件File Upload.exe然后您需要在 selenium 中指定您需要在单击上传按钮后执行和上传文件的位置,就像在我的项目中一样,我正在使用执行此文件Runtime.getRuntime().exec(Globals.PROG_FILEUPLOAD);Global.PROG_FILEUPLOADFile Upload.exe 的路径在哪里PROG_FILEUPLOAD= "E:/AutoIT/File Upload.exe"我还分享了链接供您参考,如果您有任何疑问,可以使用https://www.guru99.com/use-autoit-selenium.html

守着星空守着你

使用以下代码以无头模式上传文件:    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() 方法中给出要上传的文件的确切完整路径。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java