Использование "python-uinput" для автоматического тестирования

python
webdriver
linux
Теги: #<Tag:0x00007fedd9ff3d08> #<Tag:0x00007fedd9ff1a80> #<Tag:0x00007fedd9fee880>

(Михаил Зайцев) #1

Добрый день всем!
У меня линукс. Пишу автотесты на Python3 с использованием вэбдрайвера. Сразу прошу прощение за глупые вопросы, но я новичок и очень хочется научиться

Есть такая задача: загрузить картинку на сайт и потом взять ее линк для проверки.
Проблема в том что при нажатии на кнопку загрузки картинки открывается окно все браузера, и как следствие, вэбрайвер не работает. В этом окне мне нужно ввести адрес ~/image/, несколько раз нажать вниз и потом ENTER.

Покапавшись в нете я понял что это решает "python-uinput" http://tjjr.fi/sw/python-uinput/ , но вот подробно о том как сказать компьютеру выполнить эти команды, я не могу понять!
Помогите пожалуйста!)


(Mykhailo Poliarush) #2

Приложите скриншот страницы, где необходимо загрузить файл и код, который который вы создали для того чтобы сделать upload файла на сервер.

В общем, upload должен работать через send_keys метод.

driver.find_element_by_css_selector("input[type='file']").send_keys("C:\\test.jpeg")

(ex3me0) #3

upload_field = driver.find_element_by_xpath("//input[@id='upload']")
upload_filed.send_keys("C:\image.jpg")
# Then find&click Submit button

Достаточно послать путь к изображению в инпут


(Mykhailo Poliarush) #4

ну и вообще, таких тем уже много создавали, тут перечислены ссылки на другие темы


(Rostyslav Simchuk) #5

Якщо це звичайне системне вікно вибору файла, то можна заюзати: xdotool.

example:

xdotool getactivewindow key Tab Tab Return
sleep 1
xdotool getactivewindow key Tab Tab Tab Tab Down Ctrl+L
xdotool getactivewindow type 'path_to_file'
xdotool getactivewindow key Return


(Михаил Зайцев) #6

Спасибо большое за ответы,


Вот скриншот - окно системное, открывается и нужно работать именно с ним.

Кодом я довожу до открытия этого окна. но дальше ничего не происходит... если быть точным то я ничего и не написал... не могу понять как управлять.
@polusok: пробовал этот код как тут рекомендовали не работает - нужно что-то не вэбдрайверское.

file1 = driver.find_element_by_css_selector("input[type='file']")
file1.send_keys('//mike/Python/Projects/iRoofing/image/image1.png')

@ex3me0 пробовал

upload_field1 = driver.find_element_by_xpath("//input[@id='magazineCompanyImgInput']")
upload_field1.send_keys('/home/mike/Pictures/Selection_001.png')

В JAVE есть метод(класс) Robot, который достаточно хорошо работает, но вот какой его аналог на Питоне и если есть где можно прочитать?

@r_s: спасибо, сейчас постараюсь ознакомиться с методом xdotool

Однако все-равно подскажите метод эмулированиея нажатия клавишь для питона на линуксе
Заранее благодарен!


(Mykhailo Poliarush) #7

Мне более важно было посмотреть форму апплоада на сайте, нежели само окно выбора файла и также посмотреть html.

Ну еще надо понимать как работает upload http://tools.ietf.org/html/rfc1867 ведь необязательно эмулировать клики мышкой и так далее, потому так можно например сделать upload через javascript.


(Denis Gayevskiy) #8

Вам НЕ нужно доходить до этапа системного окна, то есть кликать на кнопку НЕ нужно. Необходимо передать файл напрямую через метод sendKeys() вебдрайвера КНОПКЕ АПЛОАДА НА СТРАНИЦЕ, о чем тут уже не один раз упомянули. Покажите html с кнопкой аплоада.


(Михаил Зайцев) #9

Понял, вот кнопка на сайте


(Михаил Зайцев) #10

Я разобрался в чем дело было: input был заблокирован. если его разблокировать то все работает отлично

driver.execute_script("document.getElementById('magazineCompanyImgInput').setAttribute('Style','display:block !important')")
driver.find_element_by_id("magazineCompanyImgInput").send_keys('/home/mike/Python/Projects/iRoofing/image/image1.png')

Но это настолько костыльный метод.
Если у кого-то есть совет как настроить работу с системными окнами буду очень благодарен!
И еще, Огромное всем спасибо за отзывчивость по данной теме!)


(Denis Gayevskiy) #11

То есть доп строчка кода - это костыльный метод, а городить конструкцию для взаимодействия с системными окнами - это хорошо?) Я так понимаю, вами движет маниакальное желание точь-в-точь повторить действия пользователя при автоматизации кейса, но это не всегда хорошо и практично. Ваш случай как раз отличный пример такого 'не всегда хорошо и практично'.


(Михаил Зайцев) #12

@Denis_Gayevskiy: ))) просто хочется разобраться как работать не только с использованием браузера и действительно мной "движет маниакальное желание точь-в-точь повторить действия пользователя при автоматизации кейса" - вы это хорошо подметили)


(Denis Gayevskiy) #13

А вы уже разобрались, как работать только с использованием браузера?


(Михаил Зайцев) #14

@Denis_Gayevskiy ну еще не до конца - учусь!)