Подтвердить что ты не робот

Как загрузить файл (изображение) с помощью selenium, python

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

Все эти подходы не будут работать с современными загрузчиками изображений в 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

Ответ 4

Я добавил ответ всем, кто хочет разобраться с надоедливыми сообщениями msofiledialogs. Это работает над предложенным решением saravanan, но более детально проработано для 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")

Ответ 5

Я использую тонкую загрузку, запускаю тесты на selenium с помощью pytest, и это сработало для меня:

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

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

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

Ответ 6

import win32com.client

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

Решение проблемы

Ответ 7

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

   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 соответственно.

Ответ 8

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

browser.attach_file ( 'file_chooser_id', fully_qualified_file_path)

Ответ 9

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

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.

Ответ 10

полный код для загрузки файла с помощью инструмента autoit. Вы можете просто скопировать вставить это, и вы можете запустить, это будет работать, так как это демонстрационная версия.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import os

def fileUploading():

    driver = webdriver.Firefox()
    driver.implicitly_wait(20)
    wait = WebDriverWait(driver, 10)
    driver.get("https://demo.actitime.com/login.do");
    driver.find_element(By.ID,"username").send_keys("admin")
    driver.find_element(By.NAME, "pwd").send_keys("manager")
    driver.find_element(By.XPATH, "//div[.='Login ']").click()
    wait.until(ec.element_to_be_clickable((By.XPATH, "(//div[@class='popup_menu_icon'])[3]")))
    driver.find_element(By.XPATH, "(//div[@class='popup_menu_icon'])[3]").click()
    wait.until(ec.element_to_be_clickable((By.XPATH, "//a[contains(text(),'Contact actiTIME Support')]")))
    driver.find_element(By.XPATH, "//a[contains(text(),'Contact actiTIME Support')]").click()
    wait.until(ec.element_to_be_clickable((By.XPATH,"//div[@class='dz-default dz-message']")))
    driver.find_element(By.XPATH,"//div[@class='dz-default dz-message']").click()
    os.system("C:\\Users\\mallikar\\Desktop\\screenUpload.exe")
    time.sleep(2000)

fileUploading()

ниже приведено содержание кода autoit:

WinWaitActive("File Upload")
Send("D:\SoftwareTestingMaterial\UploadFile.txt")
Send("{ENTER}")

загрузите инструмент автоматического редактирования SCIT. После этого установите autoit и откройте редактор scite, вставьте приведенный выше код и сохраните его с расширением .au3. После сохранения щелкните правой кнопкой мыши файл и выберите сценарий компиляции (x64), теперь файл .exe создан.

Теперь используйте следующий код:

os.system("C:\\Users\\mallikar\\Desktop\\screenUpload.exe")

Ответ 11

Очень простой способ управления такими компонентами, как селектор файлов Windows (или просто ваша ОС в целом), - использовать pyautogui. Вы можете установить pyautogui через pip

import pyautogui
... # set the webdriver etc.
...
...
element_present = EC.presence_of_element_located((By.XPATH, "//button[@title='Open file selector']"))  # Example xpath

WebDriverWait(self.driver, 10).until(element_present).click() # This opens the windows file selector

pyautogui.write('C:/path_to_file') 
pyautogui.press('enter')