Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

java.awt.Robot - какие подводные камни на не-Windows платформах?

selenide
webdriver
java
Теги: #<Tag:0x00007f7b69a1fd88> #<Tag:0x00007f7b69a1f518> #<Tag:0x00007f7b69a1ec58>

(ByteSurfer) #1

Пишу небольшой фреймворк для личного развития с использованием технологий, которые не получается применять на реальных проектах (Selenide, Spring, Hibernate) на примере тестирования Gmail. Хочу что б мой проект работал на нескольких платформах, основные проблемы связанные с этим я решил, единственный нюанс это работа java.awt.Robot (использую для аплоада файлов в письма) - я с ним раньше никогда не работал и не знаю какие у него есть нюансы, тем не менее на Windows всё ок, робот, что называется, работает (там простые команды ctrl + v и нажать enter), а вот как это будет на линуксе и MacOS? Кто-то сталкивался с чем-то подобным?


(Sergey Korol) #2

Основные подводные камни Robot'a - это невозможность работы в хэдлес режиме, и удаленно (через грид, к примеру). Но к платформам это никакого отношения не имеет. Java - кросплатформенный язык.


(ByteSurfer) #3

Java - кросплатформенный язык.

Это точно. Однако, кросплатформенность java.awt, насколько мне известно, ограниченная, т.к. одни и те же элементы интерфейса на разных платформах могут вести себя по-разному. Другими словами, я не уверен что такой способ зааплоадить файл сработает на макосе, но проверить не могу, поэтому и спрашивал сталкивался ли кто-то с подобным.

Основные подводные камни Robot’a - это невозможность работы в хэдлес режиме, и удаленно (через грид, к примеру)

И что в таком случае принято применять вместо него?


(Sergey Korol) #4

Ну в хэдлес режиме вас ничего не спасет. Все подобные тулы / библиотеки требуют active desktop mode.

Я бы все же рекомендовал посмотреть на реализацию аплоадера. Если ключевой элемент является input с типом file, то проще воспользоваться встроенными возможностями webdriver, отправляя путь через sendKeys. Бывают правда кейсы, когда input скрыт. Тогда его можно вначале насильно сделать видимым через JS, а затем проделать те же самые действия.

В случае кастомного аплоадера, где вообще нет инпутов, тут могут помочь image recognition tools по типу sikulix (либо сырой opencv). Пожалуй, это единственный кросплатформенный вариант.

В случае с удаленным запуском, вам потребуется ремоутная версия sikulix. Либо в качестве альтернативы можно и Robot поднять на удаленке (в виде микро-сервиса).

В крайнем случае, можно узнать end-point аплоадера, и отправить stream c помощью REST / SOAP (или что там у вас используется).