WebElement UploadImg = driver.findElement(By.xpath("//*[@id='file_upload_button']"));
UploadImg.click();
WebElement frame =driver.switchTo().activeElement();
frame.sendKeys("d:\5.jpg");
此代码只是打开系统窗口,但它不会选择任何照片/文件
答案 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")