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

2022-09-02 03:42:59

我看到很多人在使用Selenium WebDriver在测试环境中上传文件时遇到问题。我使用硒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);
}

这就是我所做的,就在打开“打开”窗口之后:

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);

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


答案 1

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

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");

这个想法是直接将文件的绝对路径发送到一个元素,您通常会单击该元素以获取模式窗口 - 即元素。<input type='file' />


答案 2

谢谢亚历克斯,

Java Robot API帮助我上传文件。我厌倦了使用WebDriver进行文件上传。以下是我使用的代码(对你的代码进行小的修改):

Robot robot = new Robot();
robot.delay(1000);

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);
robot.delay(1000);

推荐