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

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

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

Покапавшись в нете я понял что это решает “python-uinput” python-uinput | tuomasjjrasanen , но вот подробно о том как сказать компьютеру выполнить эти команды, я не могу понять!
Помогите пожалуйста!)

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

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

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

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

1 лайк

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

Якщо це звичайне системне вікно вибору файла, то можна заюзати: 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

1 лайк

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

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

Кодом я довожу до открытия этого окна. но дальше ничего не происходит… если быть точным то я ничего и не написал… не могу понять как управлять.
@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

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

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

Ну еще надо понимать как работает upload RFC 1867 - Form-based File Upload in HTML ведь необязательно эмулировать клики мышкой и так далее, потому так можно например сделать upload через javascript.

1 лайк

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

1 лайк

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

Я разобрался в чем дело было: 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')

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

1 лайк

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

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

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

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