Selenium:在 Google Chrome 中上传文件

问题描述 投票:0回答:4

由于 Selenium RC“attach_file”仅支持 *Firefox,有什么方法可以在 Google Chrome 中上传文件吗?非常感谢任何建议或解决方法。

python selenium webdriver
4个回答
5
投票

如果您使用 Webdriver,那么要上传文件,您只需使用“sendKeys”输入文件路径即可。您需要“跳过”单击浏览按钮打开对话框以选择文件的部分。适合我的 Java 版本如下所示,

WebElement inputFilePath = driver.findElement(By.id("filepath"));
inputFilePath.sendKeys("/absolute/path/to/my/local/file");

3
投票

上传文件通常是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()

0
投票

WebElement inputFilePath = driver.findElement(By.id("文件路径")); inputFilePath.sendKeys("/absolute/path/to/my/local/file"); sendKeys 不起作用


-1
投票

使用 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");
}
© www.soinside.com 2019 - 2024. All rights reserved.