Какой модуль поддерживает тестирование GUI на Windows и на MacOS

Уважаемые гуру, так сложилась моя жизнь, что до сего дня все время работал с встроенным софтом. Писал на Python и был счастлив. Но сегодня передо мной встала во всей своей красе проблемма, как автоматизировать приложение, которое существует под Windows и под OSX. Понятное дело, что с API частью особых проблем не возникло. Но вот что касается GUI… Попрбовал UIsoup и LDTP. Первый, как выяснилось, не хочет сосуществовать с 64-битным Python. И если в мире Windows можно пойти на это и поставить 32-битный Python на 64-битную систему, то вот в яблочном мире с этим хуже. LDTP тоже не доставил удовольствия. В своей OSX ипостаси (atomac) он не находит окно по AppBundleID, которое только что по этому самому AppBundleId открыл. Не говоря уже о том, что тормозят оба модуля безбожно.

Подскажите, может у кого есть удачный опыт с этими или какими иными модулями. Или инструмент какаой, желательно хоть как-то интегрируемый с Python. Ну в крайнем случае придумаем как интегрировать, но важно, чтобы можно было работать с GUI на Windows и MacOS.

Заранее спасибо.

поищите разные инструменты тут awesome-test-automation/python-test-automation.md at master · atinfo/awesome-test-automation · GitHub, но вообще можете попробовать GitHub - asweigart/pyautogui: A cross-platform GUI automation Python module for human beings. Used to programmatically control the mouse & keyboard.

Спасибо за совет. Попробую и поделюсь наблюдениями.

1 лайк

А нужно именно бесплатное решение?
А то мы у себя для тестирования Qt-приложения под Win и Linux используем Squish и вполне счастливы, разница минимальна. Squish же работает и под MacOS, правда я лично не пробовал.

Ну бесплатное решение - это, конечно, же лучше. Но работоспособное платное вполне приемлемо. Проблемма пока в том, что большинство того, что мы пробовали имеет неприемлимый список ограничений или ведет себя странно. UIsoup не работает с 64 битным Python, находящийся сейчас в стадии пробы PyAutoGUI, похоже, не умеет находить окна. По крайней мере в документации я не нашел ничего относящегося к этому. Да и в планах на будущее, кажется, видел, что работу с окнами надо еще делать. Давайте попробуем Squish. Может быть и мы будем счастливы. Спасибо!

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

Еще раз спасибо. Сейчас пройдет очередной аврал и буду пробовать.

Можно зайти со стороны Selenium-based инструментов. Для автоматизации GUI настольных приложений под Windows можно использовать https://github.com/2gis/Winium.Desktop, а под OS X GitHub - appium/appium-for-mac: [deprecated] Application for automating a mac app with JSON wire protocol.

Оба инструмента реализуют единый интерфейс JsonWire Protocol (aka Selenium WebDriver Protocol), т.е. API для написания тестов будет одинаковым. При этом, т.к. в Selenium исползьуется клиент-серверная архитектура, то тесты (клиент) можно писать на любом языке, в том числе и на python.

Но я лично Appium for Mac не использовал и не знаю на сколько он готов к серьезному использованию, но он, как и Winium, полностью open source, т.е. можно подпилить, если надо.

Это правда. Системы поиска окон и контролов в PyAutoGUI нет.
На чём сделан GUI - это важная информация. Например, с 64-битным питоном умеет работать pywinauto, но он пока перемалывает только нативные GUI (этой зимой подключим UI Automation API, и будет больше приложений покрыто, на линуксах тоже кое-что ковыряем, но нескоро ещё). До OS X руки дойдут года через полтора, не раньше. Если только эксперт по OS X не найдётся.

QT - вообще отдельная песня. Тут без Squish, видимо, не обойтись. Из бесплатных знаю только funq.

1 лайк

@Vasily_Ryabov обойтись :slight_smile: Можно все сделать стандартными возможностями QT/QML : TestCase QML Type | Qt Quick Test 5.15.13

Стартовать с примеров можно из ubuntu-sdk (в свое время очень сильно мне помогло): https://developer.ubuntu.com/en/apps/qml/tutorials/qml-integration-testing/
Либо взять пример интегрейшн тестов из вебкита, например: Source Browser

Squish просто красивая обертка вокруг всего этого. Более того можно использовать тот же питон - python-qt5/TestCase.qml at master · pyqt/python-qt5 · GitHub
Или устаревший (но все таки работающий) tDriver - testability-driver | RubyGems.org | your community gem host

2 лайка

Оу, это интересно, спасибо за прицельные ссылки. Не совсем понял, как можно дёргать QT-шный GUI именно из питоновского скрипта, без QML файла. А ещё, я так понял, установка PyQT для всех этих возможностей обязательна? Хотелось бы понять минимальный джентльменский набор для автоматизатора QT-шного GUI приложения при полном отсутствии сорцов. И возможно ли это без установленного QT в принципе?

P.S. Да, мой QT опыт == None. :slight_smile:

Очень возможно, в QT очень легко выцепить все кастомные элементы, если конечно приложение не было как-то жестоко обфусцировано. Лично по моему опыту - Squish оверхэд, монстр аля HP QuickTest, который и маштабировать достаточно сложно, да и специфики использования слишком много. Вообще с десктоп приложениями часто все очень и очень плохо, доля их падает, есть слишком много разной платформенной специфики - и тестировать, тем более автоматически их никто не хочет, большинство просто делают это руками, либо пишут свои собственные фреймворки-биндинги, если продукт этого действительно требует.

А какие-нибудь примеры “выцепления” есть? Или может руководства по добыче данных об элементах?