Пишу небольшой фреймворк для личного развития с использованием технологий, которые не получается применять на реальных проектах (Selenide, Spring, Hibernate) на примере тестирования Gmail. Хочу что б мой проект работал на нескольких платформах, основные проблемы связанные с этим я решил, единственный нюанс это работа java.awt.Robot (использую для аплоада файлов в письма) - я с ним раньше никогда не работал и не знаю какие у него есть нюансы, тем не менее на Windows всё ок, робот, что называется, работает (там простые команды ctrl + v и нажать enter), а вот как это будет на линуксе и MacOS? Кто-то сталкивался с чем-то подобным?
Основные подводные камни Robot'
a - это невозможность работы в хэдлес режиме, и удаленно (через грид, к примеру). Но к платформам это никакого отношения не имеет. Java - кросплатформенный язык.
Java - кросплатформенный язык.
Это точно. Однако, кросплатформенность java.awt, насколько мне известно, ограниченная, т.к. одни и те же элементы интерфейса на разных платформах могут вести себя по-разному. Другими словами, я не уверен что такой способ зааплоадить файл сработает на макосе, но проверить не могу, поэтому и спрашивал сталкивался ли кто-то с подобным.
Основные подводные камни Robot’a - это невозможность работы в хэдлес режиме, и удаленно (через грид, к примеру)
И что в таком случае принято применять вместо него?
Ну в хэдлес режиме вас ничего не спасет. Все подобные тулы / библиотеки требуют active desktop mode.
Я бы все же рекомендовал посмотреть на реализацию аплоадера. Если ключевой элемент является input
с типом file
, то проще воспользоваться встроенными возможностями webdriver
, отправляя путь через sendKeys
. Бывают правда кейсы, когда input
скрыт. Тогда его можно вначале насильно сделать видимым через JS, а затем проделать те же самые действия.
В случае кастомного аплоадера, где вообще нет инпутов, тут могут помочь image recognition tools по типу sikulix
(либо сырой opencv
). Пожалуй, это единственный кросплатформенный вариант.
В случае с удаленным запуском, вам потребуется ремоутная версия sikulix
. Либо в качестве альтернативы можно и Robot
поднять на удаленке (в виде микро-сервиса).
В крайнем случае, можно узнать end-point аплоадера, и отправить stream c помощью REST / SOAP (или что там у вас используется).