任何人都可以通过Java代码让我知道如何使用Selenium上传文件吗?
当我点击应用程序中的按钮时,它会在新窗口中打开,我可以使用它来选择上传文件。由Silverlight(C#)开发的浏览按钮。
答案 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,
打开程序 - &gt;自动工具 - &gt; SciTE脚本编辑器。
将以下代码粘贴到自动编辑器中并将其另存为“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}")
然后从自动工具的工具菜单编译和构建 - &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。
如下: -
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();