Как загрузить файл (картинку) с селеном, питоном - PullRequest
44 голосов
/ 29 декабря 2011

Как загрузить изображение в веб-приложение с помощью инструмента тестирования селена?Я использую python.

Я пробовал много вещей, но ничего не получалось.

Ответы [ 9 ]

133 голосов
/ 06 мая 2012

Что я делаю, это (убедитесь, что drv является экземпляром webdriver):

drv.find_element_by_id("IdOfInputTypeFile").send_keys(os.getcwd()+"/image.png")

, затем найдите кнопку отправки и нажмите ее.

7 голосов
/ 01 марта 2018

Я добавил ответ для тех, кто хочет использовать сделку с назойливыми msofiledialogs. Это отрабатывает предложенное Саравананом решение, но больше подходит для Python.

У меня была похожая проблема со сценарием, над которым я работаю для сторонней компании. Я пытаюсь загрузить документы для клиентов компании, но из-за того, как работает их сайт, я не смог использовать send_keys для прямой отправки пути, поэтому мне пришлось полагаться на msofiledialog.

  1. Вам нужно только установить AutoIt https://pypi.python.org/pypi/PyAutoIt/0.3 или просто "pip install -U pyautoit" через экран cmd

  2. введите "import autoit" на странице скрипта

  3. Введите следующее до появления диалогового окна файла в вашем скрипте:

    autoit.win_active ( "Открыть") autoit.control_send ( "Open", "edit1", г "C: \ Users \ уу \ Desktop \ TestUpload.txt") autoit.control_send ( "Открыть", "Edit1", "{ENTER}")

Он ищет диалоговое окно открытия файла, заполняет его и нажимает ввод. «Открыть» - это заголовок диалогового окна моего файла. Поместите свой заголовок вместо «Открыть». Существуют более творческие способы использования функций AutoIt, но это простой и понятный способ для начинающих.

Редактировать: НЕ. НЕ используйте control_send для большинства вещей, если вы можете избежать этого. У него есть известная проблема отправки ошибочного текста. В моем случае двоеточие в моем пути к файлу превращалось в точку с запятой. Если вам нужно отправить ключи ввода, все будет в порядке, однако если вам нужно отправить текст, используйте control_set_text. Он имеет такой же синтаксис.

autoit.control_set_text("Open","Edit1",r"C:\Users\uu\Desktop\TestUpload.txt")
7 голосов
/ 09 июня 2014

Все эти подходы не будут работать с современными загрузчиками изображений в olx !!!Альтернативный подход (только для окон)

1. Automation of windows can be done using Autoit 
2. Install Autoit and SciTe Script editor 
3. Autoit code :(imageupload.au3)

WinActivate("File Upload");  for chrome use "open" that is the name of the window that pops 
send("D:\images\image1.png");  path of the file
Send("{ENTER}")

4. compile it to get an .exe file(imageupload.exe)
5. Now from python call the .exe file like

import os
import os.system('C:\images\imageupload.exe') #path of the .exe file
5 голосов
/ 02 октября 2017

Я использую Fine-Uploader , выполняю тесты селена с pytest, и это сработало для меня:

    elm = driver.find_element_by_xpath("//input[@type='file']")
    elm.send_keys(os.getcwd() + "/tests/sample_files/Figure1.tif")

В моем случае не требуется отправка формы или ввод ключа.

Спасибо за все ответы! Это очень помогло!

4 голосов
/ 05 января 2012

Загрузка элемента управления вводом открывает собственное диалоговое окно (это делается браузером), поэтому нажатие на элемент управления или кнопку просмотра через Selenium просто вызовет диалоговое окно, и тест будет зависать.

Обходной путь - установитьзначение загрузки ввода через JavaScript (в Java это делается через JavascriptExecutor), а затем отправьте форму.

См. этот вопрос для образца в C #, я уверен, что есть также способвызывать JavaScript на Python, но я никогда не использовал привязки Selenium Python

3 голосов
/ 30 сентября 2016
import win32com.client

shell = win32com.client.Dispatch("WScript.Shell")   
shell.Sendkeys("C:\text.txt")  
shell.Sendkeys("~")

Решит вопрос

0 голосов
/ 15 марта 2018

Вот код, который я использовал:

Imagepath = "C:\User\Desktop\image.png" driver.find_element_by_xpath('//html/body/input').send_keys(Imagepath) driver.find_element_by_xpath('//html/body/button').click()

Я принимаю Ответ от karloskar. Примечание. Это не работает для FireFox (59). И это работает только с Chrome Driver.

0 голосов
/ 07 декабря 2017

Использование splinter:

browser.attach_file ('file_chooser_id', полностью_qualified_file_path)

0 голосов
/ 27 ноября 2015

Я использовал приведенный ниже формат сценария для загрузки изображений.Это может вам помочь.

   Imagepath=os.path.abspath('.\\folder1\\subfolder2\file1.jpg')
   driver.find_element_by_id("Id of the element").clear()            
   driver.find_element_by_id("Id of the element").send_keys(Imagepath)

, если у вас нет идентификатора объекта, тогда вы можете использовать xpath или css selector соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...