如何使用Selenium Webdriver中的“上传图像按钮”上传文件/照片

时间:2013-09-26 10:08:06

标签: java selenium selenium-webdriver

  WebElement UploadImg = driver.findElement(By.xpath("//*[@id='file_upload_button']"));
  UploadImg.click();
  WebElement frame =driver.switchTo().activeElement();
  frame.sendKeys("d:\5.jpg");

此代码只是打开系统窗口,但它不会选择任何照片/文件

4 个答案:

答案 0 :(得分:4)

尝试将代码更改为:

  WebElement UploadImg = driver.findElement(By.xpath("//*[@id='file_upload_button']"));
  UploadImg.sendKeys("d:\5.jpg");

答案 1 :(得分:4)

运行此代码:

JavascriptExecutor js = (JavascriptExecutor) driver; 
js.executeScript("arguments[0].setAttribute('style', arguments[1])",` driver.findElement(By.xpath("//input[@type='file']")), "0");
js.executeScript("arguments[0].setAttribute('class', arguments[1])", driver.findElement(By.xpath("//input[@type='file']/../../div[2]")), "a");
driver.findElement(By.xpath("//input[@type='file']")).sendKeys("Your Path to the file your system");

说明:每个“浏览”按钮在隐藏状态下的DOM中都有一个<input>标记。通过使用下面的代码行,我们只需更改包含<input>标记的标记的类和样式属性,使其变为可见,并在其上执行sendKeys()命令。之后,当您使用要上传的图像/文件的绝对路径执行sendKeys时。

答案 2 :(得分:3)

Kyop的答案是正确的,但为了实现这个目的,您发现的元素需要采用<input type="file" id="file_upload_button">形式。您可以发布相关代码的HTML片段来验证这一点吗?

同样为什么使用XPath使id发现变得复杂?仅仅使用driver.findElement(By.id("file_upload_button"))会有什么好处吗?

来源:this post

答案 3 :(得分:0)

我正在使用@Raavan解释的想法。

例如:在此页面https://touch.facebook.com/marketplace/selling/item/上,我成功使用了以下代码:

c = nav.find_element_by_xpath("//input[@type='file']")
c.send_keys("/home/izaias/Documentos/Script/img/133722.jpg")