Selenium: загрузить файл в Google Chrome

Есть ли способ загрузить файл в Google Chrome, поскольку Selenium RC "attach_file" поддерживает только * Firefox? Любые предложения или обходные пути очень ценятся.

7 голосов | спросил drewboy 12 MarpmMon, 12 Mar 2012 14:03:19 +04002012-03-12T14:03:19+04:0002 2012, 14:03:19

3 ответа


0

Если вы используете Webdriver, то для загрузки файла все, что вам нужно, это использовать sendKeys для ввода пути к файлу. Вам необходимо «пропустить» часть нажатия на кнопку обзора, которая открывает диалоговое окно для выбора файла. Версия Java, которая работает для меня, выглядит примерно так:

WebElement inputFilePath = driver.findElement(By.id("filepath"));
inputFilePath.sendKeys("/absolute/path/to/my/local/file");
ответил nilesh 14 MaramWed, 14 Mar 2012 06:47:05 +04002012-03-14T06:47:05+04:0006 2012, 06:47:05
0

Загрузка файла - это обычно запрос POST, поэтому вы можете загрузить файл без использования Selenium; Если на вашем сайте не требуются файлы cookie, необходимо сначала восстановить файлы cookie с помощью webdriver.get_cookies ()

Простой пример:

# 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()
ответил EwyynTomato 12 MarpmMon, 12 Mar 2012 14:53:45 +04002012-03-12T14:53:45+04:0002 2012, 14:53:45
0
  

Использование 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");
}
ответил Vitus 18 MaramMon, 18 Mar 2013 11:58:24 +04002013-03-18T11:58:24+04:0011 2013, 11:58:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132