pywinauto 使用 .print_control_identifiers() 看不到 ListView 对象

pywinauto doesn't see ListView object using .print_control_identifiers()

我正在评估 pywinauto 库,以便能够自动化 win 桌面应用程序,到目前为止它看起来很有前途。为了进行评估,我使用了我之前多次使用过的简单 BookDB2 应用程序(例如:通过 testComplete 或 UFT 评估)。与此应用程序中我能够找到并使用的其他对象不同,pywinauto 由于某种原因看不到它的 ListView 对象。

使用时间:

from pywinauto.application import Application
app = Application(backend='uia').start(r"C:\Program Files (x86)\BookDB2\BookDB2.exe")
app.top_window().print_control_identifiers()

python 打印所有找到的对象以记录,但是缺少 ListView 对象。我还尝试使用它的属性直接找到它(在 AutoIt 间谍工具的帮助下),但没有成功。通常我会认为这个 ListView 是定制的(非标准的)——因为这可以很好地解释为什么它不被识别。但我知道 UFT 和 testComplete 在识别和使用它时没有丝毫问题。我错过了什么?

更新: 我尝试了 SWAPY - 这是一种能够监视对象和生成简单代码的 pywinauto 支持工具。

我发现SWAPY竟然可以看到这个ListView对象,它为我生成了点击操作:

from pywinauto.application import Application

app = Application().Start(cmd_line=u'"C:\Program Files (x86)\BookDB2\BookDB2.exe" ')
thunderrtformdc = app[u'BookDB Main Menu']
thunderrtformdc.Wait('ready')
listviewwndclass = thunderrtformdc[u'3']
listviewwndclass.Click()

app.Kill_()

在 PyCharm 中执行时 - 出现此错误:

    raise MatchError(items = name_control_map.keys(), tofind = search_text)
pywinauto.findbestmatch.MatchError: Could not find '3' in 'dict_keys(['ThunderRT6Frame', 'FiltersThunderRT6Frame', 'Filters', 'ApplyButton', 'Button', 'Apply', 'ClearButton', 'Button0', 'Button1', 'Button2', 'Clear', 'Add BookEdit', 'Edit', 'Add BookEdit0', 'Add BookEdit1', 'Add BookEdit2', 'Edit0', 'Edit1', 'Edit2', 'ComboBox', 'ApplyComboBox', 'ComboBox0', 'ComboBox1', 'ComboBox2', 'Add BookComboBox', 'Button3', 'Copies', 'CopiesButton', 'Button4', 'Add Book', 'Add BookButton', 'BooksListView', 'ListView', 'BooksHeader', 'Header', 'Button5', 'BorrowersButton', 'Borrowers', 'Button6', 'CategoriesButton', 'Categories', 'Button7', 'Publishers', 'PublishersButton', 'Authors', 'Button8', 'AuthorsButton', 'Button9', 'BooksButton', 'Books'])'

所以在我看来,SWAPY 看到了 pywinauto 看不到的东西。

好吧……原来都是我的错。这是正确的:

app = Application().start(r"C:\Program Files (x86)\BookDB2\BookDB2.exe")

出于某种原因,我在启动应用程序时忘记了代码中的 backend='uia',可能是复制粘贴错误。仍然不确定为什么其他对象可见而这个 (ListView) 不可见,但至少我的问题已解决。