winium vs winappDriver плюсы, минусы, практический опыт

Коллеги привет!
У меня сейчас стоит задача написания фреймворка для автоматизации десктопа (та еще головная боль) и встал выбор между winnapp driver и winium(пишу на java)
уже недельку пробую то одно то другую у обоих инструментов есть минусы, может кто-то поделиться опытом по следующим вопросам:
1 - winium в упор не находит элементы по xpath, кто-то пробовал? работает?(видел темы в гугле у юзеров с подобными проблемами, но решения я так понял не нашлось)
(winapp - у меня получилось только в калькуляторе по xpath найти кнопку “9”)
2 - как у них с удаленкой, кто-то запускал на виртуалке через jenkins, bamboo как работает? (видел темы что нужно поддерживать актинвый экран, но вроде эта проблема решаема)
3 - виниум уже не поддериживается как я понял, поэтому ожидать каких-то правок не стоит? например имплисити вейт не реализован и тд

вообщем может кто-то поделится опытом, с какими основными проблемами пришлось столкнуться и тд, что стоит учесть до полного выбора инструмента?

ну и в догонку мини вопросик, кто настраивал запуск через jenkins или еще какой сборщик, запуск автотестов по расписанию, нужен ли мне для этого селениум грид, или можно такими конструкциями обойтись:
DesktopOptions options = new DesktopOptions { ApplicationPath = “Exe Path” };
WiniumDriver driver = new WiniumDriver((new Uri(“http://‘XX.XX.XX.XXX:9999’/”)), options);
?

Если у Вас одна машина для запуска автотестов, то и такая конструкция не нужна - достаточно на ней поставить слэйв и запускать bat скриптом на этом слэйве “как бы локально”

На чем написано приложение, видите ли вы контролы? Имейте ввиду, что WinAppDriver только для Windows10 (согласно их документации) Зачем вам xpath? Посмотрите в сторону FlaUI - использует техноглогию UIAutomation. Но нужно на С#.

По поводу Java для десктоп фреймворка - не рекомендую начинать, т.к. скорее всего, бросите и все равно перейдете на C#. Судя по своему опыту, вам рано или поздно придется взаимодействовать с Win32 API (например, найти хендл окна и запостить туда сообщение) и Java здесь далеко не лучший язык по той простой причине, что он не родной. Подобная задача, например, может решаться подключением дополнительной библиотеки jna.

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

Использовал связку Java+WiniumDriver для написания UI тестов.
В основном это не больше тесты которые участвуют в полном процесс е2е тестов. Т.е открываю десктоп app и делаю некие манипуляции с заявками.
Основная логика крутится на web.

  1. По xpath элементы находит.Ниже пример по которому у меня находит:
    private By dinamicSapId = By.xpath("//*[starts-with(@Name,‘69301080’)]");
    Но в основном искал по id , name.
  2. СI использую TeamCity , на удаленном сервере установлен агент который ранит тесты.
    -Запуск приложения удаленно использую
    DesktopOptions option = new DesktopOptions();
    option.setApplicationPath(getProperty(“remotePath”));
    wdriver = new WiniumDriver(new URL(" сервер")option);
    -Для активного экрана использую windowSimulator.
    -Для поиска элементов использую UAI Verify

Минусы
-Долго ищет контролы.
-Если в приложении использовался DevExpress для создания форм , то проблематично работать с таблицами , так как DevExpress изменил type “table” на “window”.

Спасибо, оч полезная инфа, а можно попродобнее про windowSimulator? т.е. без активного экрана winium не пашет? а можно ссылочку на эту штуку?

Активный экран должен быть в любом случае, так как это UI тест, хоть то будет winium или winapDriver.
Симулятор есть в каждой винде и находится :
C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Simulator\

Я работал в основном с Winium, т.к. этот инструмент работает со всем рабочем столом, а не только с приложением, как WinAppDriver. Но должен сказать в пользу второго, что он работает быстрее, т.к. работает именно с приложением.

Заметил один нюанс при работе с Winium, если у вас отрыт браузер во время работы автоматов, то искать нужный элемент будет дольше обычного, как я понял, сначала обходит все элементы браузера, а потом ищет в приложении нужный элемент. WinAppDriver работает в этом плане быстрее.

Отсюда вывод, который сделал я, если вам не нужно работать со всем раб. столом, а только с приложением, выбирайте WinAppDriver. Если нужно взаимодействие с раб. столом, выбирайте Winium

1 лайк

Можете подробнее рассказать как вы используете Windows Simulator? Как и в какой момент его запускаете?

Здравствуйте!
В моём случае, я запускал Windows Simulator вручную на серваке(создал bat file, в котором прописал старт Windows Simulator) перед тем, как нужно было прогнать UI тесты.
Если нужно запускать симулятор в процессе CI. То наверное возможно добавить в билд степ запуск симулятора.

так у вас уже есть скрипт, вызовите его в ci и всё