【发布时间】:2012-03-12 10:03:19
【问题描述】:
由于 Selenium RC "attach_file" 仅支持 *Firefox,有什么方法可以在 Google Chrome 中上传文件?非常感谢任何建议或解决方法。
【问题讨论】:
-
[我在这里使用python发布了一个答案。][1] [1]:stackoverflow.com/a/11872608/471376
由于 Selenium RC "attach_file" 仅支持 *Firefox,有什么方法可以在 Google Chrome 中上传文件?非常感谢任何建议或解决方法。
【问题讨论】:
如果您使用的是 Webdriver,那么您只需使用“sendKeys”输入文件路径即可上传文件。您需要“跳过”单击打开对话框以选择文件的浏览按钮的部分。适合我的 Java 版本如下所示,
WebElement inputFilePath = driver.findElement(By.id("filepath"));
inputFilePath.sendKeys("/absolute/path/to/my/local/file");
【讨论】:
上传文件通常是一个 POST 请求,所以你实际上可以不使用 Selenium 上传文件;除非您的网站需要 cookie,否则您需要先使用 webdriver.get_cookies() 重建 cookie
一个简单的例子:
# required package:
# http://pypi.python.org/pypi/MultipartPostHandler/0.1.0
import MultipartPostHandler, urllib2, cookielib
cookies = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies),
MultipartPostHandler.MultipartPostHandler)
path_to_file = r"abc.zip"
open_file = open(path_to_file,"rb")
param = { "file": open_file }
req = opener.open("http://www.yoursite.com/uploadfile", param)
open_file.close()
【讨论】:
使用 IJavaScriptExecutor 是将上传输入字段更改为可点击,因此 chrome 驱动程序不会弹出错误说此元素不可点击。
[SetUp]
public void SetupTest()
{
driver = new ChromeDriver();
baseURL = "";
verificationErrors = new StringBuilder();
}
[Test]
public void Test()
{
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
IWebElement element = driver.FindElement(By.Id("UploadFile_ButtonID"));
js.ExecuteScript("arguments[0].style.visibility = 'visible'; arguments[0].style.height = '1px'; arguments[0].style.width = '1px'; arguments[0].style.opacity = 1", element);
Thread.Sleep(1000);
element.SendKeys("D:\\path\\test\\image.jpg");
}
【讨论】: