如何在 Java 中使用 Selenium WebDriver 上传文件

Posted

技术标签:

【中文标题】如何在 Java 中使用 Selenium WebDriver 上传文件【英文标题】:How to upload file using Selenium WebDriver in Java 【发布时间】:2013-05-29 14:25:01 【问题描述】:

谁能告诉我如何通过 Java 代码使用 Selenium 上传文件?

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

【问题讨论】:

欢迎 Mahesh - 你能给我们更多的背景吗?也许发布一个屏幕截图和/或您的网络应用程序的代码,并向我们展示您迄今为止开发的网络驱动程序代码? 【参考方案1】:

首先确保输入元素可见

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

不要点击浏览按钮,它会触发操作系统级别的对话 框并有效地阻止您的测试死亡。

您可以使用:

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

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

请记住,只有如果您发送文件的元素应采用<input type="file">

的形式,上传才有效

【讨论】:

嗨@ArupRakshit,如果您能在此处提供代码要点,那就太好了。这样我们就可以看看为什么它不起作用。谢谢。 您可以使用以下代码获取文件的绝对路径并上传内容String filePath = System.getProperty("user.dir") + "/src/res/test.pdf; driver.findElement(By.id("elementID")).sendKeys(filePath); 是的,在这种情况下属性 非常重要。【参考方案2】:
driver.findElement(By.id("urid")).sendKeys("drive:\\path\\filename.extension");

【讨论】:

【参考方案3】:

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

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

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

    在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 脚本编辑器。

在 Eclipse 编辑器中粘贴下面的 Java 代码并保存

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.

【讨论】:

干得好! :-) 我对脚本做了一些改进:***.com/questions/14592853/…【参考方案4】:

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

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

完成

【讨论】:

甜蜜。但这是关键事件而不是鼠标事件(显然)。总之好主意... . 它不会为我关闭上传窗口【参考方案5】:

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

//打开上传窗口 上传.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);

【讨论】:

你能解释一下机器人按键步骤在调用上述命令时到底发生了什么吗? 按回车,粘贴文本,再按回车

以上是关于如何在 Java 中使用 Selenium WebDriver 上传文件的主要内容,如果未能解决你的问题,请参考以下文章

如何搭建selenium+java环境搭建

Selenium Web自动化测试学习

如何在 Java 中执行 Selenium 测试

如何使用java中的selenium Web驱动程序中的分页搜索表中的元素

如何使用 javascript 使用 selenium Webdriver 使用 java 设置所选 Web 元素的属性?

我已使用 selenium web 驱动程序 JAVA 将产品添加到手推车中,然后将其从购物车中删除。我如何断言产品是不是被移除?