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



这是我在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。在写我的问题之前,我试图在互联网上找到解决方案。但我没有找到解决方案。

问题出在以下方面:Mac OS具有从打开对话框而不是窗口打开文件的另一个原则。对我来说,解决问题的最简单方法是使用机器人。因此,当我们单击打开对话框的网页按钮时,我们需要选择它们。我们为此组合键使用 命令 + 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 + 命令 + 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); 

为什么我们按两次回车键?第一次按接受输入路径,第二次按接受所选文件)

我真的为解决这个问题消磨了很多时间,也许是原因,我在mac os上新来的。我希望这些信息对您来说既有趣又重要。))

问候叶夫赫尼

最新更新