【问题标题】:Unable to access windows controls inside pywinauto's hwndwrapper (wrapper class无法访问 pywinauto 的 hwndwrapper(包装类
【发布时间】:2016-02-11 06:55:12
【问题描述】:

我是 python 和 pywinauto 的新手。尝试使用 SWAPY 在 pywinauto.controls.hwndwrapper.hwndwrapper 中设置或获取 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']

【问题讨论】:

  • 分享您的代码 sn-p。它将帮助其他人快速了解您的问题。

标签: python wrapper pywinauto


【解决方案1】:

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

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

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

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

可能的window/child_window 参数与find_elements 中列出的参数相同。


附:出色的 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>

【讨论】:

  • vasily,子窗口有两个文本框和按钮。当我尝试获取控件时,我只得到这个子类的详细信息,如下所示:c=app.SAP.ChildWindow(class_name='Afx:633C0000: 1008') c.PrintControlIdentifiers() 在控制台中,控制标识符:Afx:633C0000:1008 - '' (L21, T141, R1345, B696) '11' 'Afx:633C0000:1008' ()
  • PrintControlIdentifiers() 仅对顶级窗口有用。对于控件,您将始终在输出中包含此控件信息。
  • 使用app.SAP.PrintControlIdentifiers() 获取表单上的所有控件。
  • 它没有在 Afx:633C0000:1008 类中提供控件。按钮 - '' (L34, T113, R128, B133) '9' '按钮' () Afx:633C0000:8:00010003:00000010:00000000 - '' (L24, T696, R1348, B728) '10' 'Afx: 633C0000:8:00010003:00000010:00000000' () Afx:633C0000:1008 - '' (L24, T141, R1348, B696) '11' 'Afx:633C0000:1008' ()
  • FI,链接坏了。
猜你喜欢
  • 2017-10-22
  • 2022-06-10
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多