这是我在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上新来的。我希望这些信息对您来说既有趣又重要。))
问候叶夫赫尼