• Как запустить .bat файл через pywinauto?

    vasily-v-ryabov
    @vasily-v-ryabov
    Python, UI Automation, pywinauto
    Скорее всего это типичная проблема launcher -> spawned child process. Нужно просто покурить параметры метода .start(...), чтобы он не ждал GUI в launcher процессе (кажется, wait_for_idle=False), а потом использовать метод .connect(...) уже по тайтлу окна, например, с таймаутом (оно же не мгновенно появится). Ну, или да, стартовать лончер модулем subprocess, чтоб ничего не курить.
    Ответ написан
    Комментировать
  • Как в pywinauto захватить окно по названию из переменной?

    vasily-v-ryabov
    @vasily-v-ryabov
    Python, UI Automation, pywinauto
    app.login эквивалентен app.window(best_match="login"), то есть при взятии атрибута "login" - это строка, а не переменная. Нужно использовать доступ по ключу:
    app[login].set_focus() # или
    app.window(best_match=login).set_focus()
    Ответ написан
    Комментировать
  • Почему pyautogui не работает на VPS?

    vasily-v-ryabov
    @vasily-v-ryabov
    Python, UI Automation, pywinauto
    Может вот это поможет: Remote Execution Guide из доков по pywinauto, но многие вещи универсальны для всех видов GUI automation. Если вкратце:

    1. Можно настроить винду так, чтобы при отключении RDP активный рабочий стол сохранялся.
    2. Можно перейти на VNC server.
    3. Нельзя из-под сервиса скедулить GUI related задачи. Есть пример для Ansible и psexec, а также для встроенного Windows Scheduler.
    Ответ написан
  • Как вытащить окно windows на передний план?

    vasily-v-ryabov
    @vasily-v-ryabov
    Python, UI Automation, pywinauto
    Или с помощью pywinauto:
    from pywinauto.application import Application
    
    app = Application().connect(title_re="Telegram")
    app.window(title_re='Telegram \(\d+\)').set_focus()

    Вообще, я смотрю, весь клиент Телеграма сделан на каких-то кастомных элементах на основе Qt5. Ни одного нормального имени в Inspect.exe не видно. Одни картинки. И ещё окно никуда не перемещается из центра - это бага или так гениально задумано?
    Ответ написан
    Комментировать
  • Как писать автоматические тесты для десктопных приложений?

    vasily-v-ryabov
    @vasily-v-ryabov
    Python, UI Automation, pywinauto
    Если PyQt, то на Windows теперь с ним может неплохо справляться pywinauto (начиная с ноября 2016), если использовать "uia" backend (о бэкендах подробнее в Getting Started Guide), который упрощает работу с технологией MS UI Automation. Знаю уже несколько человек, так автоматизировавших Qt приложения. Вопросы можно задавать на гитхабе или в Gitter чате есть русскоязычная комната.

    Если PyQt на линуксе, то здесь новый бэкенд можно ожидать следующей зимой-весной.
    Ответ написан
    Комментировать
  • Как нужно тестировать браузерные расширения?

    vasily-v-ryabov
    @vasily-v-ryabov
    Python, UI Automation, pywinauto
    Насчёт одинакового кода - не факт, что получится. Но, скажем, у меня студент писал скрипт на питоне, который перетаскивает файл из explorer.exe в Google Drive, открытый в Chrome:
    https://github.com/vasily-v-ryabov/ui-automation-c...

    Для хрома нужен ключик с опциями "включить accessibility" (см. пример выше). FF и Opera по умолчанию должны включать поддержку MS UI Automation. Разумеется, всё это будет работать только под Windows. Хоть в pywinauto и ведётся разработка под Linux, но она ещё на ранней стадии.

    Если интересно, лучше начать изучение pywinauto с Getting Started Guide. Так быстрее.
    Ответ написан
  • Как автоматизированно тестировать бизнес кейсы gui приложения под Windows?

    vasily-v-ryabov
    @vasily-v-ryabov
    Python, UI Automation, pywinauto
    Из open-source проектов я бы рекомендовал pywinauto. Мы как раз автоматизировали на нём GUI тесты для MFC приложений (ещё с 2010 года), хотя сейчас он поддерживает много больше всего на Windows и идёт разработка под Linux (пока в начальной стадии). Знаю людей, которые, например, переходят с платного HP UFT на pywinauto.
    pywinauto.github.io

    Лучше всего начать с Getting Started Guide (там про все основные концепции). Для MFC достаточно дефолтного бэкенда на основе Win32 API (все детали pywinauto скрывает).
    Ответ написан
    Комментировать
  • Где найти тихий автокликер?

    vasily-v-ryabov
    @vasily-v-ryabov
    Python, UI Automation, pywinauto
    Питоновский пакет pywinauto может делать многие действия даже для минимизированного окна (если не использовать click_input и type_keys). Пример тихой автоматизации инсталлятора для Notepad++:
    stackoverflow.com/a/32847266/3648361

    Если это Windows Store приложение, то лучше его не минимизировать и использовать другую технологию под капотом (pywinauto поддерживает MS UI Automation, но это надо явно включить; как включить - см. Getting Started Guide).

    Ссылка: pywinauto.github.io

    P.S. Разумеется, тут нужны хотя бы начальные навыки написания кода на питоне. Генератор скриптов пока в разработке. Для Win32 приложений, правда, есть SWAPY - он умеет немного генерить код в несколько кликов. Но сложные вещи лучше самому - код красивее получится.
    Ответ написан
    Комментировать
  • Как в python установить взаимодействие с ОС?

    vasily-v-ryabov
    @vasily-v-ryabov
    Python, UI Automation, pywinauto
    Зачем использовать напрямую pyWin32 и FindWindowEx (кстати, а не FindWindow, если это соседний процесс).
    Есть pywinauto, который все детали Win32 API скрывает.

    Есть пример, как сделать подобное на pywinauto (писал мой студент):
    https://github.com/vasily-v-ryabov/ui-automation-c...
    Скрипт перетаскивает файл из explorer.exe в Google Disk, открытый в Chrome.

    Но вообще, лучше pywinauto начать изучать отсюда (там основная концепция и что поддерживается под капотом):
    https://pywinauto.readthedocs.io/en/latest/getting...
    Ответ написан
  • Как написать программу, которая будет имитировать клики мыши и нажатия клавиш?

    vasily-v-ryabov
    @vasily-v-ryabov
    Python, UI Automation, pywinauto
    Если хочется по тексту искать, куда кликать, то можно заюзать pywinauto:
    pywinauto.github.io

    Начать стоит с Getting Started Guide, а потом examples (в репозитории на гитхабе). Самые свежие - это mspaint.py, win10_calculator.py и list_windows_updates.py.

    Поддерживаются две технологии: Win32 API и MS UI Automation. Это два разных бэкенда под капотом. Детальнее - в Getting Started Guide.
    Ответ написан
    Комментировать
  • Какие есть кликеры или возможности автоматизровать?

    vasily-v-ryabov
    @vasily-v-ryabov
    Python, UI Automation, pywinauto
    Лучше всего настроить auto-logon и поставить, например, TightVNC. Он сохраняет активный десктоп, даже если отключиться. Выбор же библиотеки/языка зависит от GUI фреймворка, на котором сделано приложение. Если это нативное приложение (на MFC, WTL) и любите питон, то можно заюзать pywinauto (можно даже для свёрнутого окна какие-то действия делать, т.е. и при залоченной винде, но надо знать, какие). Если это WPF или WinForms, то для них в pywinauto есть backend="uia" (технология MS UI Automation под капотом).
    Ответ написан
    Комментировать
  • Как заставить работать SendKeys через RDP?

    vasily-v-ryabov
    @vasily-v-ryabov
    Python, UI Automation, pywinauto
    Для сохранения активного десктопа можно использовать VNC (например, мы пользуем TightVNC в качестве клиента и сервера) вместо RDP. Только, если всё же зашли по RDP, то потом надо перезагрузить сервер, чтобы VNC сессия нормально работала. А ещё скрипт на сервере нельзя запускать как сервис (из сервиса активный GUI context недоступен). Для VNC, возможно, ещё потребуется обновить видеодрова, т.к. он отображает реальный выход с видеокарты в отличие от виртуального RDP.

    Что касается pywinauto, то там SendKeys как раз использует системную функцию SendInput. В ветке UIA на гитхабе (релиз запланирован на июль) уже есть метод send_chars(...), который посылает WM_CHAR через SendMessage (работает для свёрнутого окна и при залоченной винде). Но этот метод нужно использовать для конкретного окна, а не просто глобально для системы. Пример:
    app = Application().start('notepad.exe')
    app.UntitledNotepad.Edit.send_chars('Hello World!') # не нужен GUI context
    app.UntitledNotepad.Edit.type_keys('\nTyping to the active window...', with_newlines=True) # нужен GUI context

    Вызов метода для конкретного контрола ещё и автоматически ждёт, когда окно/контрол реально появится и будет готов к вводу.
    Ответ написан
    2 комментария
  • Какие библиотеки для автоматизации GUI есть для Python 3?

    vasily-v-ryabov
    @vasily-v-ryabov
    Python, UI Automation, pywinauto
    Проект переезжает на GitHub: pywinauto.github.io (с согласия Марка)
    Юнит тесты 100% проходят на Python 3.3 и 3.4.
    Правда, мы добавили зависимость от pyWin32, но это логично. Есть всякие мелкие улучшения и планы по дальнейшему развитию.
    Ответ написан
    6 комментариев