我无法在Mac OS上使用文件选择器对话框窗口使用java打开文件

时间:2015-01-28 20:18:14

标签: java macos selenium selenium-webdriver

以下是我在Windows操作系统上使用的代码。

        String fileToUpload = "\"C:\\development\\projects\\GMailTAbleTest\\1.xlsx\"";
    WebElement uploadButton = driver.findElement(By.xpath("html/body/div[16]/div[2]"));
    uploadButton.click(); // This code find and click on button which open file chooser dialog window

StringSelection somestring = new StringSelection(fileToUpload);
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(somestring, null);
        Robot robot = new Robot();
        robot.delay(3000);
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        TimeUnit.SECONDS.sleep(2);
        robot.keyPress(KeyEvent.VK_ENTER);
        robot.keyRelease(KeyEvent.VK_ENTER); 

在Mac OS上,我尝试使用VK_META(模拟命令按钮)而不是VK_CONTROL。 我使用相应的UNIX路径:

String s ="\"/Users/Yevhenii/Documents/workspace/TableTEstGmail/1.xlsx\"";

请帮助我,我使用Mac只用了几个星期。在我写这个问题之前,我试图在互联网上找到解决方案。但我找不到解决办法。

1 个答案:

答案 0 :(得分:0)

问题出在以下几点:mac os有另一个原则,即从打开的对话框而不是windows中打开文件。 至于我,解决问题的最简单方法是使用机器人。 因此,当我们点击打开,打开对话框的网页按钮时,我们需要选择它们。我们使用这个组合键COMMAND + TAB。实现代码如下:

String filePath = "/Users/Yevhenii/Documents/workspace/TableTEstGmail/2.xlsx";
StringSelection somestring = new StringSelection(filePath);
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(somestring, null);
        Robot robot = new Robot();
        robot.delay(3000);

        robot.keyPress(KeyEvent.VK_META);
        robot.keyPress(KeyEvent.VK_TAB);
        robot.delay(90);
        robot.keyRelease(KeyEvent.VK_TAB);
        robot.keyRelease(KeyEvent.VK_META);
            TimeUnit.SECONDS.sleep(1); 

然后我们需要按路径查找我们的文件。因此,当我们按下SHIFT + COMMAND + G时,它将打开窗口,我们可以通过路径打开文件。实现代码:

 robot.keyPress(KeyEvent.VK_SHIFT);
        robot.keyPress(KeyEvent.VK_META);
        robot.keyPress(KeyEvent.VK_G);
        robot.keyRelease(KeyEvent.VK_G);
        robot.keyRelease(KeyEvent.VK_META);
        robot.keyRelease(KeyEvent.VK_SHIFT);
        TimeUnit.SECONDS.sleep(1);

下一步是将路径粘贴到我们的文件中,它将具有以下表示:

            robot.keyPress(KeyEvent.VK_META);
        robot.keyPress(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_META);
        TimeUnit.SECONDS.sleep(1);
        robot.keyPress(KeyEvent.VK_ENTER);
        robot.keyRelease(KeyEvent.VK_ENTER);   
        TimeUnit.SECONDS.sleep(2);
        robot.keyPress(KeyEvent.VK_ENTER);
        robot.keyRelease(KeyEvent.VK_ENTER); 

为什么我们按两次ENTER(RETURN)?首先按接受输入的路径,然后按第二次接受选择的文件)

我真的为解决这个问题花了很多时间,也许是因为我是mac os的新人。 我希望这些信息对你来说很有意义和重要。 ))

关心Yevhenii