Я новичок в автоматизации тестирования на основе рабочего стола Windows, а также новичок в python, потратив некоторое время, pywinauto оказался очевидным выбором для тестирования приложений на основе Windows с использованием python.
Я использую pywinauto для доступа к элементам в демонстрационном приложении. Я ознакомился с соответствующей документацией и вопросами и ответами по stackoverflow, примерами на GitHub. Это то, что я сделал
app = Application(backend="win32").start(r"C:\XXX\Bin\XXX.exe")
while not app.Windows_():
time.sleep(1)
if app.window(title="Start Application - XXX 2.3").Exists():
app.window(title="Start Application - XXX 2.3").PrintControlIdentifiers()
Вывод, который я получаю, такой
b'\nHwndWrapper[XXX.exe;;ebf7c21b-5fef-4eb7-a562-3d36735e7519] - \'Start Application - XXX 2.3\' (L668, T45, R1786, B969)\n[\'HwndWrapper[XXX.exe;;ebf7c21b-5fef-4eb7-a562-3d36735e7519]\', \'Start Application - XXX 2.3HwndWrapper[Zen.exe;;ebf7c21b-5fef-4eb7-a562-3d36735e7519]\', \'Start Application - XXX 2.3\']\nchild_window(title="Start Application - XXX 2.3", class_name="HwndWrapper[XXX.exe;;ebf7c21b-5fef-4eb7-a562-3d36735e7519]")'
Я использовал инструмент подкачки, но он почему-то не предоставляет доступных элементов управления и не использует inspect.exe для проверки имен классов и т. д.
Я проверил различные другие способы, такие как использование findwindows, findwindows.find_element для дочернего окна, чтобы каким-то образом щелкнуть одну кнопку (не хотел использовать координату), а затем щелкнуть по вкладке, но ни один из них не дал мне подходящий элемент управления, например что я мог найти, используя какой-то платный инструмент, такой как Test Complete.
Интересно, можно ли сделать что-то вроде ниже, используя pywinauto
Aliases.XXX.HwndSource_mainWindow.mainWindow.leftToolAreaControl.ToolAreaTabItem.TabControl.ClickTab("Acquisition")
На данный момент единственное, что я могу сделать, это открыть приложение и с помощью оболочки закрыть или свернуть приложение.
Любое предложение будет высоко оценено.
Inspect.exe
, вам нужно использоватьbackend='uia'
. Это может быть более полезным для современных приложений. Дополнительные сведения о серверных компонентах см. в Руководстве по началу работы. - person Vasily Ryabov   schedule 01.03.2017app.window(title="Start Application - XXX 2.3").print_control_identifiers()
? Сbackend='uia'
конечно. - person Vasily Ryabov   schedule 01.03.2017[u'Size on disk:', u'Size on disk:Static', u'Static4']
. Конечно, это должно быть исправлено, чтобы соответствовать ограничениям имени атрибута, скажем,dlg.Size_on_disk_Static.window_text()
. - person Vasily Ryabov   schedule 01.03.2017UIAWrapper
не может делать доступ к атрибутам более низких уровней. Сначала вам нужно выяснить, что такое спецификация окна и как она находит оболочку. - person Vasily Ryabov   schedule 01.03.2017