我是 python 和 pywinauto 的新手,正在尝试使用SWAPY在TextBox (windows控件)中设置或获取文本,我有包装器类的类名。如何使用pywinauto中的类名(如Afx:633C0000:1008
)访问包装器类中的控件?
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']
发布于 2016-02-11 08:37:52
pywinauto提供了一个基于WindowSpecification
和包装器的两级概念。窗口规范只是用来搜索所需控件的一组描述(在创建WindowSpecification
时可能不存在)。如果找到了具体的包装器,则为实际存在的控件创建。在空闲控制台中,它看起来是这样的:
>>> app.RowListSampleApplication
<pywinauto.application.WindowSpecification object at 0x0000000003859B38>
>>> app.RowListSampleApplication.wrapper_object()
<pywinauto.controls.win32_controls.DialogWrapper object at 0x0000000004ADF780>
窗口规范只能有两个级别:app.WindowName.ControlName
。可以用更详细的搜索标准来指定:
app.window(title=u'SAP', class_name_re='^Afx:.*$')
app.SAP.child_window(class_name='Edit')
可能的window/child_window
参数与元素中列出的参数相同。
非常好的Python特性可以在生产代码中隐藏wrapper_object()
方法调用,所以您只需要为调试目的调用它。例如,这些语句是等价的(做同样的):
app.WindowName.Edit.set_text(u'text')
app.WindowName.Edit.wrapper_object().set_text(u'text')
但是下面的语句返回不同的对象:
app.WindowName.Edit # <WindowSpecification>
app.WindowName.Edit.wrapper_object() # <EditWrapper>
https://stackoverflow.com/questions/35332670
复制相似问题