【问题标题】:pywinauto doesn't see ListView object using .print_control_identifiers()pywinauto 没有使用 .print_control_identifiers() 看到 ListView 对象
【发布时间】:2019-10-24 19:32:20
【问题描述】:

我正在评估 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 spy 工具的帮助下)找到它,但没有成功。通常我会认为这个 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 看不到的东西。

【问题讨论】:

    标签: python-3.x pywinauto


    【解决方案1】:

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

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

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

    【讨论】:

    • backend="uia" 是完全不同的(更新的)技术。 SWAPY 仅支持旧版 backend="win32"。使用Inspect.exe 工具(在“UI 自动化”模式下)处理“uia”相关的事情。请参阅Getting Started Guide
    • 顺便说一句,您可以将自己的答案标记为已接受(答案左侧投票按钮下方的灰色复选框)。它只是用于指示和标签统计。
    • 谢谢@VasilyRyabov。是的,我阅读了该指南并继续返回它以及 pywinauto 的其他官方/非官方指南。我用不同的工具创建了许多 TA 框架,现在我只想使用开源库创建一个。对于 web,我有 selenium,但我也在寻找桌面支持,pywinauto 似乎相当方便,因为我使用的是 python。所以我是 pywinauto 的新手——仍然熟悉并从自己的错误中学习;-)。顺便说一句......我会接受我自己的答案,但是它告诉我我可以在 23 小时后完成 - 似乎我需要等待一下:-)。
    猜你喜欢
    • 2019-03-13
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多