如何确认记事本中存在UntitledNotepad控件?附pywinauto代码疑问
先看你从pywinauto官网复制的示例代码:
from pywinauto.application import Application app = Application().start("notepad.exe") app.UntitledNotepad.menu_select("Help->About Notepad") app.AboutNotepad.OK.click() app.UntitledNotepad.Edit.type_keys("pywinauto Works!", with_spaces = True)
你的疑问是:
如何得知记事本存在UntitledNotepad控件?我使用AutoIt获取控件信息时,无法获取包括UntitledNotepad在内的部分控件信息,但上述代码却能识别该控件,请告知确认记事本中存在UntitledNotepad控件的方法。
其实这个UntitledNotepad并不是传统意义上的“子控件”,它是记事本主窗口的标题文本,pywinauto允许你直接通过窗口标题来快速定位窗口,这也是它的便捷之处。
要确认这个窗口的存在以及相关信息,你可以用这几种方法:
用pywinauto自带的inspect工具
启动记事本后,打开命令行运行pywinauto.inspect,把鼠标移到记事本主窗口上,工具会显示窗口的所有属性。其中Name属性就是Untitled - Notepad,pywinauto会自动处理标题里的空格和连字符,所以你可以用简化后的UntitledNotepad或者完整标题"Untitled - Notepad"来定位这个窗口。用Windows自带的Inspect.exe工具
这个工具系统自带,搜索就能找到。操作和上面一样,定位到记事本窗口后,查看它的Name属性,就能看到对应的标题内容,这就是代码里UntitledNotepad的来源。在代码里打印所有窗口
写一小段代码来列出记事本的所有窗口,直观确认:from pywinauto.application import Application app = Application().connect(path="notepad.exe") # 打印所有窗口的标题和类名 for window in app.windows(): print(f"窗口标题: {window.window_text()}, 窗口类名: {window.class_name()}")运行后你会看到输出里有
窗口标题: Untitled - Notepad, 窗口类名: Notepad,这就是代码中UntitledNotepad对应的窗口。
至于AutoIt获取不到的原因,大概率是两者的识别逻辑不同:AutoIt可能更偏向于控件的类名、控件ID这类标识,而pywinauto优先支持标题定位,同时也支持类名定位——比如你把代码里的app.UntitledNotepad换成app.Notepad,同样能正常运行,因为Notepad是主窗口的类名。
内容的提问来源于stack exchange,提问作者user3300468

