pywinauto-如何识别GUI对象

时间:2018-10-02 21:31:39

标签: python python-3.6 pywinauto

我对Python相当陌生,无法识别希望使用pywinauto控制的GUI对象。

this example之后,使用以下代码,我可以打开Notepad.exe并从菜单对象中选择“帮助”。

from pywinauto.application import Application
# Run a target application
app = Application().start("notepad.exe")
# Select a menu item
app.UntitledNotepad.menu_select("Help->About Notepad")
# Click on a button
app.AboutNotepad.OK.click()
# Type a text string
app.UntitledNotepad.Edit.type_keys("pywinauto Works!", with_spaces = True)

这很酷,但是我想将此应用到更实际的示例中。我想做的是使用app = Application().start(r"C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE")打开Excel,然后从启动Excel 2016时弹出的菜单窗格中选择“空白工作簿”,从而打开一个新工作簿。

enter image description here

我已使用UISpy定位了对象,并确定名称为“空白工作簿”。使用上面的示例代码,我应该执行的选择该对象以打开新工作簿的代码行是什么?更重要的是,我该如何自己找出这些信息?

enter image description here

我正在使用Python 3.6.1。在一个不相关的问题中-我发现可以不用完全限定的名称打开“ notepad.exe”很有趣,但是打开Excel需要app = Application().start(r"C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE")-我不确定为什么会这样,但是再提一个问题...

2 个答案:

答案 0 :(得分:0)

您可以使用 SWAPY、pyinspect 等外部工具来识别对象名称。 完整列表可在此处找到:https://pywinauto.readthedocs.io/en/latest/getting_started.html

关于python的用法,您可以在每个pywinauto对话框对象上触发print_control_identifiers()函数。该函数显示了对话框的所有对象:按钮/标签/复选框等。你可以通过这里阅读它: https://pywinauto.readthedocs.io/en/latest/code/code.html#controls-reference

所以基本上,尝试 app.print_control_identifiers() 检查按钮的名称是否在那里,如果它只是使用 getattr(app, X).click() 而 X 是按钮的名称。

答案 1 :(得分:0)

  1. 正如我在您的问题中所见,您已经了解 UISpy,(我更喜欢用于 Windows 的 inspect.exe)。此类工具有助于查找 UI 对象及其属性。 我们可以使用 AutomationId、classname 等属性来访问 UI 对象。

enter image description here

这是在 EXCEL 中打开空白工作簿的代码片段。

from pywinauto import Application
import time
app = Application(backend="uia")
excelApp = app.start(r"C:\\Program Files (x86)\\Microsoft Office\\Office15\\EXCEL.EXE")
time.sleep(5)
wind = excelApp.windows()
title = wind[0].get_properties()[u'texts']
handle = excelApp.window(title = title[0])
child = handle.child_window(auto_id="AIOStartDocument")
child.click_input()

另外,你应该使用wait()方法而不是sleep time,这是一个更好的做法。

  1. 另一种方法是获取 Excel 主窗口的对象,然后使用 AccessKey(快捷键)进行操作。

如果您手动打开 excel 并按 ALT 键,您将找到快捷方式。 enter image description here

from pywinauto.application import Application
app = Application().start(cmd_line=u'"C:\\Program Files (x86)\\Microsoft Office\\Office15\\EXCEL.EXE" ')
xlmain = app.Excel
xlmain.wait('ready')
xlmain.type_keys("%L")