Не удается загрузить файл из всплывающего окна Windows с помощью класса Robot - PullRequest
0 голосов
/ 12 февраля 2019

Я использую приведенный ниже код для выбора и импорта 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();
        }
    }

1 Ответ

0 голосов
/ 12 февраля 2019

Если придерживаться подхода робота не важно, я бы посоветовал вам обработать загрузку файла следующим образом:

// 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");

В случае RemoteDriver не забудьте добавить это:

// Configure your client to upload local files to remote Selenium instance
    driver.setFileDetector(new LocalFileDetector());

ПРИМЕЧАНИЕ: путь к файлу должен быть абсолютным.Вы можете сделать это следующим образом:

String getFilePath(String filePath) {
    new File(filePath).absolutePath
}
...