无法访问pywinauto的hwndwrapper(包装类)中的窗口控件

时间:2016-02-11 06:55:13

标签: python wrapper pywinauto

join我是python和pywinauto的新手。尝试使用SWAPY在pywinauto.controls.hwndwrapper.hwndwrapper中为TextBox(windows控件)设置或获取Text,我有包装类的Class Name。如何在pywinauto中使用类名(如import pywinauto import pywinauto.controls from pywinauto.application import Application app = Application().Connect(title=u'SAP', class_name='SAP_FRONTEND_SESSION') sapfrontendsession = app.SAP afxe = sapfrontendsession[u'Afx:633C0000:1008'] )访问包装器类中的控件?

white-space: nowrap

1 个答案:

答案 0 :(得分:1)

pywinauto提供了基于WindowSpecification和包装器的2级概念。窗口规范只是一个描述,用于搜索所需控件的标准集(创建WindowSpecification时可能不存在)。如果找到,则为真正存在的控件创建具体包装器。在IDLE控制台中看起来如此:

>>> app.RowListSampleApplication
<pywinauto.application.WindowSpecification object at 0x0000000003859B38>
>>> app.RowListSampleApplication.WrapperObject()
<pywinauto.controls.win32_controls.DialogWrapper object at 0x0000000004ADF780>

窗口规范不能超过2个级别:app.WindowName.ControlName。可以使用更详细的搜索条件指定它:

app.Window_(title=u'SAP', class_name_re='^Afx:.*$')
app.SAP.ChildWindow(class_name='Edit')

可能Window_/ChildWindow个参数与find_windows中列出的相同。

P.S。伟大的Python功能可以在生产代码中隐藏WrapperObject()方法调用,因此您只需将其调用以进行调试。例如,这些语句是等效的(做同样的):

app.WindowName.Edit.SetText(u'text')
app.WindowName.Edit.WrapperObject().SetText(u'text')

但是下面的陈述会返回不同的对象:

app.WindowName.Edit # <WindowSpecification>
app.WindowName.Edit.WrapperObject() # <EditWrapper>