以下是我在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只用了几个星期。在我写这个问题之前,我试图在互联网上找到解决方案。但我找不到解决办法。
答案 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