- Селен: используется для Web Применение Автоматизированное тестирование。
- pywinauto: используется для Windows GUI Применение Автоматизированное тестирование。
- AutoIt: используется для Windows платформа Автоматизированное Кстати, поддерживает имитацию операций с клавиатурой и мышью.
from pywinauto import Application
# соединять PC Два способа подачи заявления
# app = Application(backend="uia").start("notepad.exe")
app = Application(backend="uia").connect(process=32120)
print(app.process)
# Получить главное окно
top_window = app.window(title="Нет заголовка - Notepad", control_type="Window")
# Древовидная структура меню управления печатью
top_window.print_control_identifiers()
# Получить поле ввода
document = top_window.child_window(control_type="Document")
document.print_control_identifiers()
# Отметьте, правильно ли выбрано поле ввода
document.draw_outline(colour='red')
# писать
document.click_input()
document.type_keys(keys="Your text here", with_spaces=True)
32120
Control Identifiers:
Dialog - 'Без названия - Notepad' (L-1512, T194, R-192, B886)
['Dialog', 'Без названия - NotepadDialog', 'Без названия - Notepad']
child_window(title="Нет заголовка - Notepad", control_type="Window")
|
| Pane - '' (L-1505, T280, R-199, B879)
| ['Pane', 'Без названияPane', 'Pane0', 'Pane1', 'Без названияPane0', 'Без названияPane1']
| |
| | Document - '' (L-1505, T280, R-199, B879)
| | ['Document', 'Без названияDocument']
|
| Pane - '' (L-1459, T205, R-1173, B237)
| ['Pane2', 'Без названияPane2']
| |
| | TabControl - '' (L-18704, T-17045, R-1129, B241)
| | ['TabControl', «TabControl добавить новую вкладку»]
| | child_window(auto_id="Tabs", control_type="Tab")
| | |
| | | ListBox - '' (L-18704, T-17045, R-1169, B241)
| | | ['ListBox']
| | | child_window(auto_id="TabListView", control_type="List")
| | | |
| | | | TabItem - 'Без названия. Не модифицировано. ' (L-1455, T205, R-1173, B241)
| | | | ['Без названия. Не модифицировано. TabItem', 'Без названия. Не модифицировано. ', 'TabItem']
| | | | child_window(title="Нет заголовка. Не модифицировано. ", control_type="TabItem")
| | | | |
| | | | | Static - 'Без названия' (L-1440, T214, R-1398, B232)
| | | | | ['Static', 'Без названия', 'Без названияStatic']
| | | | | child_window(title="Нет заголовка", control_type="Text")
| | | | |
| | | | | Button - «Закрыть вкладку» (L-1219, T209, R-1183, B236)
| | | | | ['Button', «Закрыть вкладку», «Кнопка закрытия вкладки», 'Button0', 'Button1']
| | | | | child_window(title="Закрыть вкладку", auto_id="CloseButton", control_type="Button")
| | |
| | | Button - «Добавить новую вкладку» (L-1166, T210, R-1130, B237)
| | | ['Button2', «Добавить кнопку новой вкладки», «Добавить новую вкладку»]
| | | child_window(title="Добавить новую вкладку", auto_id="AddButton", control_type="Button")
| |
| | Pane - «Блокнот автоматически сохраняет прогресс. Весь ваш контент будет доступен при следующем открытии Блокнота. ' (L0, T0, R0, B0)
| | ['Блокнот автоматически сохраняет прогресс. Весь ваш контент будет доступен при следующем открытии Блокнота. Пане', «Блокнот автоматически сохраняет прогресс. Весь ваш контент будет доступен при следующем открытии Блокнота. ', 'Pane3']
| | child_window(title="Блокнот автоматически сохраняет прогресс. Весь ваш контент будет доступен при следующем открытии Блокнота.", auto_id="TeachingTip", control_type="Pane")
|
| Pane - '' (L-1505, T242, R-365, B275)
| ['Pane4', 'Без названияPane3']
| |
| | Menu - '' (L-1505, T242, R-1310, B278)
| | ['Menu', 'Без названияMenu', 'Menu0', 'Menu1']
| | child_window(auto_id="MenuBar", control_type="MenuBar")
| | |
| | | MenuItem - 'документ' (L-1500, T242, R-1444, B278)
| | | ['документ', 'Файл Меню Элемент', 'MenuItem', 'MenuItem0', 'MenuItem1']
| | | child_window(title="файл", auto_id="File", control_type="MenuItem")
| | |
| | | MenuItem - 'редактировать' (L-1435, T242, R-1380, B278)
| | | ['редактировать', 'Редактировать Меню Элемент', 'MenuItem2']
| | | child_window(title="Изменить", auto_id="Edit", control_type="MenuItem")
| | |
| | | MenuItem - 'Проверять' (L-1370, T242, R-1314, B278)
| | | ['Проверять', 'ViewMenuItem', 'MenuItem3']
| | | child_window(title="Просмотр", auto_id="View", control_type="MenuItem")
| |
| | Button - 'настраивать' (L-237, T243, R-203, B277)
| | ['Button3', 'настраивать', 'SetButton']
| | child_window(title="Настройки", auto_id="SettingsButton", control_type="Button")
|
| TitleBar - '' (L0, T0, R0, B0)
| ['TitleBar']
| |
| | Menu - 'система' (L-1503, T203, R-1478, B228)
| | ['Menu2', 'система', 'Системное меню', «Система 0», «Система 1»]
| | child_window(title="Система", auto_id="MenuBar", control_type="MenuBar")
| | |
| | | MenuItem - 'система' (L-1503, T203, R-1478, B228)
| | | ['MenuItem4', 'Системный Элемент Меню', «Система 2»]
| | | child_window(title="Система", control_type="MenuItem")
| |
| | Button - «минимизировать» (L-356, T195, R-303, B229)
| | ['Button4', «Кнопка свернуть», «минимизировать»]
| | child_window(title="свернуть", control_type="Button")
| |
| | Button - «максимизировать» (L-303, T195, R-251, B229)
| | ['Button5', «максимизировать», 'Максимизировать Кнопку']
| | child_window(title="Развернуть", control_type="Button")
| |
| | Button - «закрытие» (L-251, T195, R-198, B229)
| | ['Button6', «закрытие», 'Закрыть Кнопку']
| | child_window(title="Закрыть", control_type="Button")
Control Identifiers:
Document - '' (L-1505, T280, R-199, B879)
['Document']
app = Application(backend="uia").start("notepad.exe")
Невозможно запустить нормальноapp = Application(backend="uia").start("notepad.exe")
print(app.process)
Напечатанный идентификатор процесса 2643, но фактический идентификатор процесса 836, в результате чего элемент не найден:
pywinauto.findwindows.ElementNotFoundError: {'title': 'Без названия - Notepad', 'control_type': 'Window', 'backend': 'uia', 'process': 21300}
Кто знает, может помочь ответить на этот вопрос, большое спасибо.
print_control_identifiers
Печатные компоненты не совпадают. | | Document - '' (L-1505, T280, R-199, B879)
| | ['Document', 'Без названияDocument']
👋 привет, я Lorin Лорейн, один Java Разработчик бэкэнд-технологий!девиз:Technology has the power to make the world a better place.
🚀 Моя страсть к технологиям — это моя мотивация продолжать учиться и делиться ими. Мой блог — это место об экосистеме Java, серверной разработке и последних технологических тенденциях.
🧠 Будучи энтузиастом серверных технологий Java, я не только с энтузиазмом изучаю новые возможности языка и глубину технологий, но также с радостью делюсь своими идеями и передовым опытом. Я верю, что обмен знаниями и сотрудничество с сообществом могут помочь нам расти вместе.
💡 В моем блоге вы найдете информацию об основных концепциях Java, JVM. В основе технологии лежат общие фреймворки, такие как Spring и Mybatis. 、Управление базами данных, например MySQL、RabbitMQ、Rocketmq и другое промежуточное программное обеспечение для сообщений、Оптимизация производительности и другой контентиз Подробная статья。Я также поделюсь некоторыми советами и решениями по программированию.вопросизметод,Чтобы помочь вам лучше освоить программирование на Java.
🌐 Я поощряю взаимодействие и создание сообщества,Поэтому, пожалуйста, оставляйте свои вопросы, предложения или пожелания по теме.,Дайте мне знать, что вас интересует. также,Я поделюсь последними новостями Интернета и технологий.,Чтобы вы всегда были в курсе последних событий в мире технологий. Я с нетерпением жду возможности двигаться вперед по пути технологий вместе с вами.,Давайте исследуем безграничные возможности мира технологий.
📖 Следите за обновлениями моего блога и давайте вместе стремиться к техническому совершенству.