使用Java Robot API和Java的Selenium WebDriver进行文件上载的一种解决方案

Ale*_*lex 21 java file-upload selenium-webdriver

我看到很多人在使用Selenium WebDriver在测试环境中上传文件时遇到问题.我使用selenium WebDriver和java,并遇到了同样的问题.我终于找到了解决方案,所以我会在这里发布,希望它能帮到别人.

当我需要在测试中上传文件时,我点击按钮中的Webdriver并等待弹出窗口"打开".然后我将路径复制到剪贴板中的文件,然后将其粘贴到"打开"窗口并单击"确定".这是有效的,因为当弹出窗口"打开"时,焦点始终在"打开"按钮中.

您将需要这些类和方法:

import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;


public static void setClipboardData(String string) {
   StringSelection stringSelection = new StringSelection(string);
   Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
}
Run Code Online (Sandbox Code Playgroud)

这就是我在打开"打开"窗口后所做的事情:

setClipboardData("C:\\path to file\\example.jpg");
//native key strokes for CTRL, V and ENTER keys
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
Run Code Online (Sandbox Code Playgroud)

就是这样.这对我有用,我希望它适合你们中的一些人.

Pet*_*ček 29

实际上,也有一种内置技术.它应该适用于所有浏览器和操作系统.

Selenium 2(WebDriver)Java示例:

// assuming driver is a healthy WebDriver instance
WebElement fileInput = driver.findElement(By.xpath("//input[@type='file']"));
fileInput.sendKeys("C:/path/to/file.jpg");
Run Code Online (Sandbox Code Playgroud)

我们的想法是直接将文件的绝对路径发送到您通常单击的元素以获取模态窗口 - 即<input type='file' />元素.

  • 但.它只是填充路径,任何ajax调用__应该在`<input>`失去焦点后解析_(这意味着在`sendkeys()`调用之后,你需要在`<input>`之外单击或者开始填充一些另一个用于`onchange`脚本来触发). (3认同)