setClipboardData("C:\\path to file\\example.jpg");
//native key strokes for CTRL, V and ENTER keys
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);
使用Selenium:sendKeys()当您要将本地计算机的文件(引用本地文件)传输到Grid-Node服务器时,需要使用setFileDetector方法。通过使用此Selenium-Client将通过JSON Wire协议传输文件。有关详细信息,请参阅saucelabs fileUpload Example
//click on button to open upload dialog
driver.findElement(By.xpath("sample/xpath")).click();
// Create a new Robot instance
Robot robot = new Robot();
Thread.sleep(2000);
//File Need to be imported
File file = new File("/Users/username/Documents/sampleFile.pdf");
StringSelection stringSelection = new StringSelection(file.getAbsolutePath());
//Copy to clipboard
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
// Cmd + Tab is needed since it launches a Java app and the browser looses focus
robot.keyPress(KeyEvent.VK_META);
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_META);
robot.keyRelease(KeyEvent.VK_TAB);
robot.delay(500);
//Open Goto window CMD+SHIFT+G
robot.keyPress(KeyEvent.VK_META);
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_G);
robot.keyRelease(KeyEvent.VK_META);
robot.keyRelease(KeyEvent.VK_SHIFT);
robot.keyRelease(KeyEvent.VK_G);
robot.delay(500);
//Paste the clipboard value CMD+V
robot.keyPress(KeyEvent.VK_META);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_META);
robot.keyRelease(KeyEvent.VK_V);
robot.delay(500);
//Press Enter key to close the Goto window and Upload window
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.delay(500);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.delay(500);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.delay(500);
8条答案
按热度按时间pu82cl6c1#
这应该适用于Firefox、Chrome和IE驱动程序。
waxmsbnn2#
我想我需要在亚历克斯的回答上加一点东西。
我尝试使用以下代码打开“打开”窗口:
窗口打开了,但驱动程序变得没有React,代码中的操作甚至没有达到机器人的操作。我不知道为什么会发生这种情况,可能是因为浏览器失去了焦点。
我让它工作的方法是使用Actions selenium类:
qxsslcnc3#
点击按钮并使用下面的代码。* 注意在路径名中使用**'\'而不是''**,这对代码的工作 *..
xhv8bpkk4#
我也使用selenium webdriver和java,也遇到了同样的问题。我所做的是复制路径到剪贴板中的文件,然后将其粘贴在“打开”窗口中,并单击“输入”。这是工作,因为焦点始终在“打开”按钮。
代码如下:
你需要这些类和方法:
这就是我在打开“打开”窗口后所做的:
就是这样。这对我来说是有效的,我希望它对你们中的一些人有效。
daolsyd05#
模态对话框打开后,脚本将无法工作,它只是挂起。因此,首先调用
autoit.exe
,然后单击以打开模态对话框。像这样很好用,
chhkpiq46#
通过使用
RemoteWebElement
类,您可以使用以下代码上传文件。使用Java
Selenium: sendKeys()
或Robot Class
上传文件。这个方法是将指定的文件路径设置到剪贴板。
tell full Path of file
的方式。OK
选择文件。Go To Folder
“- Command + Shift + G。OK
打开它。文件上传测试**:-**点击
Try it Yourself
可以找到fileUploadBytes.html
文件。使用Selenium:sendKeys()当您要将本地计算机的文件(引用本地文件)传输到Grid-Node服务器时,需要使用setFileDetector方法。通过使用此Selenium-Client将通过JSON Wire协议传输文件。有关详细信息,请参阅
saucelabs fileUpload Example
zpjtge227#
如果您正在使用Mac,并正在寻找一种与Robot一起工作的简单方法:
1.如果是Mac机,Ctrl+V不起作用,则需要使用cmd+v。(CMD键使用VK_ meta)。
1.您需要为IDE提供特定权限才能访问该设备。请参阅本文获取权限:
机器人keyPress和keyRelease根本不工作
1.当您使用机器人点击上传按钮后打开Java应用程序,浏览器失去焦点(使用CMD+TAB回到上一个应用程序),请使用下面的代码作为我的情况下相同的工作
1.请注意,在每次释放按键后,您需要添加一些延迟以使其工作。此外,按键组合可能因使用情况而异。
3hvapo4f8#
或者可以使用支持Selenium的Webdriver-
并在upload元素上执行通常的类型-