为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕标5832272 2022-05-21 20:41:31
我正在创建一个需要我上传文件的脚本,所以我写了如下内容:    @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;并且两者仍然无效
查看完整描述

3 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

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

确保您的上传元素可见。

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

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


查看完整回答
反对 回复 2022-05-21
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

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

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

我已经分享了链接,您可以下载并使用它

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

  1. 您需要创建 autoit 文件并需要传递文件位置和一些脚本,并根据需要命名文件,就像我给 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_FILEUPLOADFile Upload.exe 的路径在哪里

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

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

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


查看完整回答
反对 回复 2022-05-21
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

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


    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() 方法中给出要上传的文件的确切完整路径。


查看完整回答
反对 回复 2022-05-21
  • 3 回答
  • 0 关注
  • 221 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信