Вопрос или проблема
У меня есть две версии программы для Windows, которая используется для управления информацией о сотрудниках. Эта программа управляется через графический интерфейс. Старая версия программы заполнена данными, и я хотел бы перенести эти данные в новую версию. Продавец программного обеспечения хочет взять с меня плату за этот перенос, поэтому я хотел бы узнать, могу ли я сделать это самостоятельно. Есть ли какое-то программное обеспечение, которое поможет мне написать робота для этого?
Это должно быть что-то, что может искать в окне определенный текст, например “имя”, а затем кликать в окне относительно местоположения этого текста, чтобы скопировать имя в буфер обмена.
По предпочтению, я хотел бы библиотеку, с которой можно общаться на:
Python, Java, C++
Я уже использовал Sikuli, но не думаю, что у неё есть необходимые возможности для поиска текста.
Библиотека Python pywinauto может вам помочь. Если программа имеет нативные элементы управления (написанные с помощью MFC, WTL или аналогичных; некоторые приложения WinForms могут быть автоматизированы), то это то, что вам нужно. Не стесняйтесь задавать более подробные вопросы о pywinauto по тегу StackOverflow. Я один из сопровождающих pywinauto.
Также существует простой помощник для GUI pywinauto: SWAPY. Он может быстро показать, какие элементы управления видимы для pywinauto.
На странице документации pywinauto также перечислены другие подобные проекты:
Инструменты на Python:
- PyAutoGui (https://github.com/asweigart/pyautogui)
- AXUI (https://github.com/xcgspring/AXUI)
- winGuiAuto (http://www.brunningonline.net/simon/blog/archives/winGuiAuto.py.html)
Инструменты на других языках скриптов:
- Perl Win32::GuiTest (http://winguitest.sourceforge.net/)
- Ruby Win32-Autogui (https://github.com/robertwahler/win32-autogui)
- другие (https://web.archive.org/web/20131224031916/http://www.opensourcetesting.org/functional.php)
Другие бесплатные инструменты:
- AutoIt (http://www.autoitscript.com/)
- Смотрите коллекцию на: https://github.com/atinfo/awesome-test-automation
- Коммерческие инструменты
- WinRunner (http://www.mercury.com/us/products/quality-center/functional-testing/winrunner/)
- SilkTest (http://www.segue.com/products/functional-regressional-testing/silktest.asp)
- Множество других (http://www.testingfaqs.org/t-gui.html)
Ответ или решение
Для передачи данных между двумя GUI-программами на Windows, особенно если одна из версий программы содержит необходимые данные о сотрудниках, вы можете использовать несколько доступных инструментов и библиотек, которые позволят автоматизировать этот процесс.
Рекомендуемые библиотеки и инструменты:
-
pywinauto:
Это мощная библиотека для Python, предназначенная для автоматизации взаимодействия с окнами приложений Windows. Она позволяет вам получать доступ к элементам интерфейса, управлять ими и извлекать текст. Если ваше приложение использует нативные элементы управления (написанные, например, с использованием MFC или WTL), вы сможете легко взаимодействовать с ними. -
PyAutoGUI:
Это еще одна библиотека для Python, которая позволяет взаимодействовать с приложением через управление курсором, ввод текста и создание скринов экрана. Она менее специализирована, чем pywinauto, и не поддерживает нативные элементы управления так хорошо, но все же может быть полезна для более простых задач.- Репозиторий: PyAutoGUI
-
AutoIt:
Это бесплатный инструмент, который позволяет автоматизировать задачи в Windows с помощью своего собственного скриптового языка. AutoIt предоставляет широкий набор функций для: управления окнами, нажатия клавиш и работы с буфером обмена.- Сайт: AutoIt
-
Win32::GuiTest (Perl):
Если вы знакомы с Perl, вы можете использовать библиотеку Win32::GuiTest, которая также поддерживает взаимодействие с GUI Windows.- Сайт: Win32::GuiTest
Шаги для автоматизации передачи данных:
-
Изучите структуру GUI:
Используйте инструменты, такие как SWAPY или интерфейс для pywinauto, чтобы понять, как распределены элементы интерфейса в старой версии программы. Это поможет вам определить, где и какие данные вам нужно извлекать. -
Скрипт для извлечения данных:
Напишите скрипт на Python с использованием библиотеки pywinauto, который будет:- Открывать старую версию программы.
- Перебирать поля, искомые вами (например, "имя", "фамилия"), и извлекать из них данные.
- Сохранять извлеченные данные в паттерн (например, список или CSV-файл) для дальнейшей загрузки.
-
Скрипт для ввода данных в новую версию:
Напишите еще один скрипт, который будет:- Открывать новую версию программы.
- Чтение данных из сохраненного файла.
- Перемещение по элементам интерфейса и ввод необходимых данных в соответствующие поля.
-
Тестирование:
Обязательно протестируйте свои скрипты на небольшом объеме данных, чтобы убедиться, что они работают правильно, прежде чем применять их к полному массиву данных.
Заключение
Автоматизация передачи данных между двумя GUI-программами на Windows может потребовать некоторых усилий и экспериментов, но с использованием рекомендованных инструментов и библиотек вы сможете справиться с задачей без привлечения поставщика программного обеспечения. Удачи!