无法使用pywinauto使用标识符访问win32应用程序的元素

时间:2017-02-28 18:36:18

标签: pywinauto

我是基于Windows桌面的测试自动化的新手,也是python的新手,花了一些时间后,pywinauto变成了使用python进行基于Windows的应用程序测试的明显选择。

我正在使用pywinauto在演示应用中访问元素。我已经通过相关文档和stackoverflow Q& As,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]")'

我使用过swapy工具,但不知何故不提供可用控件并使用inspect.exe检查类名等。

我检查了各种其他方法,例如使用findwindows,findwindows.find_element用于子窗口,以某种方式单击一个按钮(不想使用坐标),然后单击选项卡,但没有一个给我一个合适的控制,就像我使用像Test Complete这样的付费工具所能找到的。

想知道,是否可以使用pywinauto

执行类似下面的操作
Aliases.XXX.HwndSource_mainWindow.mainWindow.leftToolAreaControl.ToolAreaTabItem.TabControl.ClickTab("Acquisition")

目前唯一可以做的就是打开应用程序,然后使用包装器关闭或最小化应用程序。

任何建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

总结一下这里的评论:

  • 如果您成功使用Inspect.exe,则需要使用backend='uia'。这对现代应用程序可能更有帮助。有关后端的更多详细信息,请参见Getting Started Guide

  • print_control_identifiers()的巨大输出不是堆栈跟踪而是控制树。您可以从此输出中每个控件描述的第二行复制并粘贴可能的属性名称。例如,您可以在此处使用此列表中的多个名称:

    [u'Size on disk:', u'Size on disk:Static', u'Static4']

    当然,应该更正以符合属性名称限制,例如dlg.Size_on_disk_Static.window_text()

  • 另请注意,属性解析魔法应该跨层次结构。因此,您可以省略某些级别,它应该搜索子树内的控件。

  • 还有一个重要的事情:窗口规范可以是多层次的,但UIAWrapper不能对较低级别进行属性访问。首先,您需要弄清楚什么是窗口规范以及它如何找到包装器。