【发布时间】: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