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

任何人都可以让我知道如何通过Java代码使用Selenium上传文件?

当我点击应用程序中的button时,它会在新窗口中打开我可以用来select上传文件的内容。 Silverlight(C#)开发的浏览button。

首先确保input元素是可见的

不要点击浏览button,它会触发一个操作系统级别的对话框,并有效地停止你的testing死亡。

相反,您可以使用:

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

myUploadElement是该元素的id(在这种情况下是button),在sendKeys中你必须指定你想上传的内容的绝对path (图像,video等)。 selenium会为你做剩下的。

请记住,上传将只能工作如果您发送文件的元素应该是<input type="file">

 driver.findElement(By.id("urid")).sendKeys("drive:\\path\\filename.extension"); 

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

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

DONE

如果您有一个文本框来input文件path,只需使用sendkeysinput文件path,然后单击提交button。 如果没有文本框input文件path,只能点击浏览button,并从popup的窗口中select文件,则可以使用AutoIt工具,请参阅以下步骤使用相同的AutoIt,

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

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

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

    然后编译并生成该文件以使其可执行。 (工具→编译)

自动编号:

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

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

将下面的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. 

我试图使用上面的机器人有一个需要添加延迟:(你也不能debugging或做别的事情,因为你失去了焦点:(

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

find标记为type="file" 。 这是由selenium支持的主要标签。 如果您能够build议您使用相同的XPath。

  • 使用sendkeys的button有浏览选项(该button,将打开你的窗口框来select文件)
  • 现在点击要上传文件的button

如下 :-

 driver.findElement(By.xpath("//input[@id='files']")).sendKeys("D:"+File.separator+"images"+File.separator+"Lighthouse.jpg""); Thread.sleep(5000); driver.findElement(By.xpath("//button[@id='Upload']")).click(); 

对于多个file upload,将所有文件通过sendkeys一个接一个,然后点击上传

 driver.findElement(By.xpath("//input[@id='files']")).sendKeys("D:"+File.separator+"images"+File.separator+"Lighthouse.jpg""); driver.findElement(By.xpath("//input[@id='files']")).sendKeys("D:"+File.separator+"images"+File.separator+"home.jpg"); driver.findElement(By.xpath("//input[@id='files']")).sendKeys("D:"+File.separator+"images"+File.separator+"tsquare.jpg"); Thread.sleep(5000); driver.findElement(By.xpath("//button[@id='Upload']")).click(); // Upload button