如何使用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,
-
打开程序 – > Autoit工具 – > SciTE脚本编辑器。
-
将下面的代码粘贴到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