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

时间:2013-06-03 12:26:58

标签: java upload selenium-webdriver

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

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

6 个答案:

答案 0 :(得分:87)

首先确保输入元素可见

正如Mark Collin在讨论here中所述:

  

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

     

相反,您可以使用:

     

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

myUploadElement 是该元素的ID(在本例中为按钮),在sendKeys中,您必须指定要上传的内容的绝对路径(图片,视频等)。 Selenium会为你做剩下的事。

请注意,上传仅适用于如果您发送文件的元素应采用<input type="file">

的格式

答案 1 :(得分:11)

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

答案 2 :(得分:10)

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

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

完成

答案 3 :(得分:4)

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

  1. http://www.autoitscript.com/site/autoit/

  2. 下载并安装自动工具
  3. 打开程序 - &gt;自动工具 - &gt; SciTE脚本编辑器。

  4. 将以下代码粘贴到自动编辑器中并将其另存为“filename.exe”(例如:new.exe)

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

  5. 自动代码:

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

    然后从自动工具的工具菜单编译和构建 - &gt; 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.
    

答案 4 :(得分: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);

答案 5 :(得分:-1)

将标记查找为Disk /dev/vda: 21.5 GB, 21474836480 bytes 4 heads, 32 sectors/track, 327680 cylinders Units = cylinders of 128 * 512 = 65536 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000cb9da Device Boot Start End Blocks Id System /dev/vda1 * 17 32768 2096128 83 Linux 。这是由硒支持的主要标签。如果您在建议时能够使用相同的方法构建XPath。

  • 使用sendkeys作为具有浏览选项的按钮(将打开的按钮) 你的窗口框选择文件)
  • 现在点击要上传文件的按钮

如下: -

type="file"

对于多个文件上传,通过sendkeys逐个放置所有文件,然后单击上传

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