如何在selenium Webdriver(Mac)中使用Robot类上传多个文件?

时间:2016-04-18 22:11:23

标签: java macos file-upload selenium-webdriver awtrobot

我正在尝试使用Robot类在selenium webdriver上传文件,我正在使用Mac机器。发送密钥不起作用。下面是代码,它在我第一次加载文件时工作正常。我正在尝试再次从同一页面上传另一个文件,但由于applet已打开,因此没有选择任何文件且脚本失败

browse.click(); // Click on a browse button from the page
File file = new File(photoLocation); //send path of the file

StringSelection StringSelection = new StringSelection(file.getAbsolutePath());

Toolkit.getDefaultToolkit().getSystemClipboard().setContents(StringSelection, null); //Copies the filepath to clipboard


robot = new Robot();

//This launches java applet, so we are using cmd+tab to shift the 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);

我使用相同的代码从主页面再次调用以上传第二个文件。但由于java applet仍处于打开状态,我无法上传该文件。我有办法关闭小程序吗?

3 个答案:

答案 0 :(得分:1)

我努力做到这一点。我终于找到了。我没有使用cmd + tab按钮移动焦点,而是使用了:

driver.switchTo().window(driver.getWindowHandle());

然后,按CMD + SHIFT + G.此外,我在粘贴路径后很快就加入了延迟。

    StringSelection StringSelection = new StringSelection(file.getAbsolutePath());
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(StringSelection, null);

    driver.switchTo().window(driver.getWindowHandle());

    Robot robot = new Robot();

    //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.delay(1000);
    robot.keyPress(KeyEvent.VK_ENTER);
    robot.keyRelease(KeyEvent.VK_ENTER);
    robot.delay(1000);
    robot.keyPress(KeyEvent.VK_ENTER);
    robot.keyRelease(KeyEvent.VK_ENTER);

我希望这有助于Mac用户上传文件。

答案 1 :(得分:0)

为什么我们每次放两次东西: -

robot.keyPress(KeyEvent.VK_META);
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_META);
robot.keyRelease(KeyEvent.VK_TAB);

答案 2 :(得分:0)

由于动作不同,两个动作均执行两次。

您正在按meta键(Window键),然后按Tab键。到达所需的窗口后,您将释放它们两者以进入该特定页面,就像我们在 Alt + Tab 中所做的一样。

这就是为什么两个动作都执行两次的原因。