Java 使用Robot类从windows弹出窗口上载文件失败

Java 使用Robot类从windows弹出窗口上载文件失败,java,selenium,selenium-webdriver,file-import,Java,Selenium,Selenium Webdriver,File Import,我使用下面的代码在我的应用程序中选择并导入csv文件。文件路径被粘贴,我也可以看到导入的数据,但我的测试用例仍然失败,我无法找出原因 public static void uploadFileFromFolder(String objectType, String objectName, String data) { // creating instance of Robot class try { StringSelection ss =

我使用下面的代码在我的应用程序中选择并导入csv文件。文件路径被粘贴,我也可以看到导入的数据,但我的测试用例仍然失败,我无法找出原因

public static void uploadFileFromFolder(String objectType, String objectName, String data) {
        // creating instance of Robot class
        try {
            StringSelection ss = new StringSelection(data);
            Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
            // paste file path in windows pop-up
            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);
        } catch (AWTException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

如果坚持机器人方法并不重要,我建议您以这种方式处理文件上传:

// Find file input element
WebElement input = driver.findElement(By.cssSelector("input[type='file']"));

// Make sure element is visible
((JavascriptExecutor) driver).executeScript("arguments[0].style.display = 'block';", input);

// Specify you local file path here
input.sendKeys("/path/to/file/on/machine/which/runs/tests");
String getFilePath(String filePath) {
    new File(filePath).absolutePath
}
如果是RemoteDriver,请不要忘记添加以下内容:

// Configure your client to upload local files to remote Selenium instance
    driver.setFileDetector(new LocalFileDetector());
注意:文件路径应该是绝对的。您可以这样做:

// Find file input element
WebElement input = driver.findElement(By.cssSelector("input[type='file']"));

// Make sure element is visible
((JavascriptExecutor) driver).executeScript("arguments[0].style.display = 'block';", input);

// Specify you local file path here
input.sendKeys("/path/to/file/on/machine/which/runs/tests");
String getFilePath(String filePath) {
    new File(filePath).absolutePath
}

请注意,这种方法在Windows和LinuxHey@S.Plekhanov中都适用。谢谢。它不起作用。我得到一份工作invocationtargetexception@user765,哪一行给你一个例外?