67

谁能让我知道如何通过 Java 代码使用 Selenium 上传文件?

当我单击应用程序中的按钮时,它会在新窗口中打开,我可以使用它来选择上传文件。Silverlight (C#) 开发的浏览按钮。

4

5 回答 5

99

首先确保输入元素可见

正如 Mark Collin 在此处的讨论中所说:

不要点击浏览按钮,它会触发一个操作系统级别的对话框并有效地停止你的测试。

相反,您可以使用:

driver.findElement(By.id("myUploadElement")).sendKeys("<absolutePathToMyFile>");

myUploadElement是该元素的 id(在本例中为按钮),在 sendKeys 中,您必须指定要上传的内容(图像、视频等)的绝对路径。Selenium 将为您完成剩下的工作。

请记住,只有当您发送文件的元素应该在表单中时,上传才会起作用<input type="file">

于 2013-06-04T02:35:31.103 回答
12
driver.findElement(By.id("urid")).sendKeys("drive:\\path\\filename.extension");
于 2013-08-07T12:04:04.780 回答
11

这是我用来通过上传窗口上传图像的:

    //open upload window
    upload.click();

    //put path to your image in a clipboard
    StringSelection ss = new StringSelection("C:\\IMG_3827.JPG");
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);

    //imitate mouse events like ENTER, CTRL+C, CTRL+V
    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_ENTER);
    robot.keyRelease(KeyEvent.VK_ENTER);
    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);

完毕

于 2014-10-16T05:47:42.477 回答
4

如果您有一个文本框来输入文件路径,只需使用 sendkeys 输入文件路径,然后单击提交按钮。如果没有输入文件路径的文本框,只能单击浏览按钮并从弹出窗口中选择文件,您可以使用 AutoIt 工具,请参阅下面的步骤以使用 AutoIt,

  1. 从http://www.autoitscript.com/site/autoit/下载并安装 Autoit 工具

  2. 打开程序 -> Autoit 工具 -> SciTE 脚本编辑器。

  3. 将以下代码粘贴到 Autoit 编辑器中并保存为“filename.exe”(例如:new.exe)

    然后编译并构建文件以使其成为exe。(工具→编译)

自动代码:

WinWaitActive("File Upload"); Name of the file upload window (Windows Popup Name: File Upload)    
Send("logo.jpg"); File name    
Send("{ENTER}")

然后从 Autoit 工具的工具菜单中编译和构建 -> SciTE 脚本编辑器。

将以下 Java 代码粘贴到 Eclipse 编辑器中并保存

Java 代码:

driver.findElement(By.id("uploadbutton")).click; // open the Upload window using selenium    
Thread.sleep("20000"); // wait for page load    
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + "C:\\Documents and Settings\\new.exe"); // Give  path where the exe is saved.
于 2014-08-03T06:02:36.220 回答
2

我尝试使用上面的机器人,需要添加延迟:(你也不能调试或做其他事情,因为你失去了焦点:(

//打开上传窗口 upload.click();

//put path to your image in a clipboard
StringSelection ss = new StringSelection(file.getAbsoluteFile());
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);

//imitate mouse events like ENTER, CTRL+C, CTRL+V
Robot robot = new Robot();
robot.delay(250);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
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.delay(50);
robot.keyRelease(KeyEvent.VK_ENTER);
于 2015-11-09T14:17:09.220 回答