Как загрузить изображение в веб-приложение с помощью инструмента тестирования селена? Я использую Python.
Я много чего перепробовал, но ничего не получалось.
Как загрузить изображение в веб-приложение с помощью инструмента тестирования селена? Я использую Python.
Я много чего перепробовал, но ничего не получалось.
Элемент управления загрузкой открывает собственное диалоговое окно (оно выполняется браузером), поэтому нажатие кнопки управления или просмотра через Selenium просто откроет диалоговое окно, и тест будет висеть.
Обходной путь - установить значение входа для загрузки через JavaScript (в Java это делается через JavascriptExecutor), а затем отправить форму.
Смотрите этот вопрос для образца в С#, я уверен, что есть также способ вызвать JavaScript в Python, но я никогда не использовал привязки Selenium Python
Я делаю это (убедитесь, что drv - это экземпляр webdriver):
drv.find_element_by_id("IdOfInputTypeFile").send_keys(os.getcwd()+"/image.png")
а затем найдите кнопку отправки и нажмите на нее.
Все эти подходы не будут работать с современными загрузчиками изображений в 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
Я добавил ответ всем, кто хочет разобраться с надоедливыми сообщениями msofiledialogs. Это работает над предложенным решением saravanan, но более детально проработано для Python.
У меня была похожая проблема со сценарием, над которым я работаю для сторонней компании. Я пытаюсь загрузить документы для клиентов компании, но из-за того, как работает их сайт, я не смог использовать send_keys для прямой отправки пути, поэтому мне пришлось полагаться на msofiledialog.
Вам нужно только установить AutoIt https://pypi.python.org/pypi/PyAutoIt/0.3 или просто "pip install -U pyautoit" через экран cmd
введите "import autoit" на странице скрипта
Введите следующую команду, прежде чем в вашем скрипте появится диалоговое окно файла:
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")
Я использую тонкую загрузку, запускаю тесты на selenium с помощью pytest, и это сработало для меня:
elm = driver.find_element_by_xpath("//input[@type='file']")
elm.send_keys(os.getcwd() + "/tests/sample_files/Figure1.tif")
В моем случае не требуется отправка формы или ввод ключа.
Спасибо за все ответы! Это очень помогло!
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.Sendkeys("C:\text.txt")
shell.Sendkeys("~")
Решение проблемы
Я использовал ниже 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 соответственно.
Использование splinter:
browser.attach_file ( 'file_chooser_id', fully_qualified_file_path)
Вот код, который я использовал:
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.
полный код для загрузки файла с помощью инструмента 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")
Очень простой способ управления такими компонентами, как селектор файлов 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')