如何使用Selenium WD + Java + JUnit通过js-doc-upload按钮上传文件?

时间:2018-05-14 15:07:51

标签: java selenium-webdriver file-upload junit automated-tests

我想上传文件,上传按钮的代码如下:

<button class="panel-box-header__controls-bttn bttn-icon js-doc-upload" type="button">
            <svg class="icon icon-clip">
                <use xlink:href="#icon-clip"></use>
            </svg>
        </button>

方法driver.findElement(By.xpath("...")).sendKeys("path of the file which u want to upload");在这里不起作用

Method Robot也不起作用:

&#13;
&#13;
    public void upload() throws Exception {
        uploadButton.click();
        Thread.sleep(2000);
//File Need to be imported
        File file = new File("/Users/admin/Desktop/test_image.jpg");
        StringSelection stringSelection= new StringSelection(file.getAbsolutePath());
//Copy to clipboard
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
        Robot robot = new Robot();
// 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
        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);
//Paste the clipboard value
        robot.keyPress(KeyEvent.VK_META);
        robot.keyPress(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_META);
        robot.keyRelease(KeyEvent.VK_V);
//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);
    }
&#13;
&#13;
&#13;

当我使用上面示例中的Robot方法时,单击上传按钮,然后打开一个包含文件的窗口,不再发生任何事情,指定的文件不会上传。

也许某人有解决这个问题的方法?使用机器人方法或任何其他选项

1 个答案:

答案 0 :(得分:1)

您不能.sendKeys()使用按钮或svg元素。两者都不是为了接受输入而设计的。

当网站使用标准.sendKeys()输入进行上传时,<input type="file />方法有效。

您需要使用Robot或其他方法点击按钮并选择要上传的文件。