Java 有没有办法在无头chrome中使用selenium上传文件?
我正在创建一个脚本,需要上传一个文件,因此我编写了如下内容:Java 有没有办法在无头chrome中使用selenium上传文件?,java,selenium,google-chrome-headless,serenity-bdd,Java,Selenium,Google Chrome Headless,Serenity Bdd,我正在创建一个脚本,需要上传一个文件,因此我编写了如下内容: @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(Ex
@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中上传文件有什么想法吗?蒂亚
编辑:添加了,wakaleo怀疑Robot类能否在无头chrome上工作,因为它与真实的UI交互。我还尝试了他的建议,使用标准的Selenium操作,比如
chord org.openqa.Selenium.Keys代码>和动作org.openqa.selenium.interactions.actions
和两者仍然不起作用您可以使用AutoIt
及其编辑器在selenium中上载文件
1.您需要安装Autoit
及其脚本编辑器
我已经通过共享链接,你可以下载并使用它
您需要创建autoit文件,并需要传递文件位置和一些脚本
就像我给文件Upload.au3.au3.au3的扩展名是自动的一样
ControlFocus("Open","","Edit1")
ControlSetText("Open","","Edit1","E:\AutoIT\id.pdf")
ControlClick("Open","","Button1")
您需要右键单击文件upload.au3文件并编译它,然后它将创建执行文件upload.exe
然后,您需要在selenium中指定执行和上载文件的位置,就像在我的项目中单击上载按钮之后一样。我正在使用Runtime.getRuntime().exec(Globals.PROG_FILEUPLOAD)执行此文件代码>
其中Global.PROG_FILEUPLOAD
是文件Upload.exe的路径,如
PROG_FILEUPLOAD= "E:/AutoIT/File Upload.exe"
我也分享了这个链接,如果你有任何疑问,可以作为参考
您可以使用AutoIt
及其编辑器在selenium中上载文件
1.您需要安装Autoit
及其脚本编辑器
我已经通过共享链接,你可以下载并使用它
您需要创建autoit文件,并需要传递文件位置和一些脚本
就像我给文件Upload.au3.au3.au3的扩展名是自动的一样
ControlFocus("Open","","Edit1")
ControlSetText("Open","","Edit1","E:\AutoIT\id.pdf")
ControlClick("Open","","Button1")
您需要右键单击文件upload.au3文件并编译它,然后它将创建执行文件upload.exe
然后,您需要在selenium中指定执行和上载文件的位置,就像在我的项目中单击上载按钮之后一样。我正在使用Runtime.getRuntime().exec(Globals.PROG_FILEUPLOAD)执行此文件代码>
其中Global.PROG_FILEUPLOAD
是文件Upload.exe的路径,如
PROG_FILEUPLOAD= "E:/AutoIT/File Upload.exe"
我也分享了这个链接,如果你有任何疑问,可以作为参考
它不起作用,因为您使用的是Robot
类,它不适合无头执行,因为浏览器无论如何都不可见
确保上载元素可见
之后,您可以使用以下内容上传:
driver.findElement(By.id("uploadElement")).sendKeys("path/to/file");
它不起作用,因为您使用的是Robot
类,它不适合无头执行,因为浏览器无论如何都不可见
确保上载元素可见
之后,您可以使用以下内容上传:
driver.findElement(By.id("uploadElement")).sendKeys("path/to/file");
使用以下代码以无头模式上载文件:
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()方法中给出要上载的文件的完整路径。使用以下代码以无头模式上载文件:
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()方法给出要上载的文件的完整路径。是的,您可以使用sendKeys进行无头chrome文件上载
- 这里的关键点是找出合适的元素
- sendkeys与输入标记(文件上传时的文件类型)完美配合
- 如果输入标记引用被包装在其他标记中,请查找它
- 查看下面的示例
- 设置无头铬驱动程序
- 使用sendkey发送文件
注意:userDir-项目运行的根目录,文件分隔符-要解决跨操作系统的文件路径问题是的,您可以使用sendkeys进行无头chrome文件上载
- 这里的关键点是找出合适的元素
- sendkeys与输入标记(文件上传时的文件类型)完美配合
- 如果输入标记引用被包装在其他标记中,请查找它
- 查看下面的示例
- 设置无头铬驱动程序
- 使用sendkey发送文件
注意:userDir-项目运行的根目录,文件分隔符-要解决跨操作系统的文件路径问题提供的答案不是to所要求的。感谢您的回答@akshaypatil,我按照您的建议尝试了AutoIT,但它也无法解决我的问题。AutoIT无法解决此问题,因为它在无头浏览器中不起作用。提供的答案不是TO所要求的。感谢您的回答@akshaypatil,我按照您的建议尝试了AutoIT,但它也不能解决我的问题。AutoIT无法解决此问题,因为它在无头浏览器中不起作用。我可以获取输入
元素的DOM吗?i、 e.可能的重复项我可以获得输入
元素的DOM吗?i、 e.可能存在的副本