繁体   English   中英

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

[英]How to upload multiple files using Robot class in selenium Webdriver (Mac)?

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

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小程序仍然打开,我无法上传文件。 有没有办法让我关闭小程序?

我已经很努力地做到了这一点。 我终于找到了。 我没有使用 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 用户上传文件。

我尝试循环上传和下载多个文件-

File folder = new File("D:\\Test\\Documents");
    File[] files = folder.listFiles();
    String filesList = "";
    for(int i = 0; i < files.length; i++){
        filesList += (i != 0? "\n":"") + files[i].getAbsolutePath();
        StringSelection sel  = new StringSelection(filesList);
------------------------------------------------------------------------

但在输出第一个文件总是上传多次并且文件读取正确。

这两个动作都执行了两次,因为动作不同。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM