python - pywinauto - 获取属性文本
问题描述
我正在使用pywinauto
并且我想从其中一个属性中选择文本。但是,我不知道如何访问它。
import pywinauto
pwa_app = pywinauto.application.Application()
path = r'C:\Users\me\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe'
pwa_app.start(path)
w_handle = pywinauto.findwindows.find_windows(title=u'Cisco AnyConnect Secure Mobility Client', class_name='#32770')[0]
window = pwa_app.window_(handle=w_handle)
window.SetFocus()
window.print_control_identifiers(2)
Control Identifiers:
Dialog - 'Cisco AnyConnect Secure Mobility Client' (L1421, T493, R1854, B690)
['Cisco AnyConnect Secure Mobility Client', 'Cisco AnyConnect Secure Mobility ClientDialog', 'Dialog']
child_window(title="Cisco AnyConnect Secure Mobility Client", class_name="#32770")
|
| #32770 - '' (L1441, T535, R1834, B647)
| ['#32770', 'VPN:#32770']
| child_window(class_name="#32770")
|
| Static - 'VPN:' (L1527, T548, R1551, B561)
| ['Static', 'VPN:Static', 'VPN:', 'Static0', 'Static1']
| child_window(title="VPN:", class_name="Static")
|
| ComboBox - 'Brock AppDMZ VPN' (L1527, T594, R1719, B615)
| ['ComboBox', 'Connected to Brock AppDMZ VPN.ComboBox', 'VPN:ComboBox', 'ComboBox0', 'ComboBox1', 'Connected to Brock AppDMZ VPN.ComboBox0', 'Connected to Brock AppDMZ VPN.ComboBox1']
| child_window(title="Brock AppDMZ VPN", class_name="ComboBox")
|
| Edit - 'Brock AppDMZ VPN' (L1530, T597, R1699, B612)
| ['Connected to Brock AppDMZ VPN.Edit', 'Edit']
| child_window(title="Brock AppDMZ VPN", class_name="Edit")
|
| ComboBox - '' (L1527, T594, R1719, B615)
| ['ComboBox2', 'Connected to Brock AppDMZ VPN.ComboBox2']
| child_window(class_name="ComboBox")
我想访问该值"Connected to Brock AppDMZ VPN"
以确定我是否已连接到我的 VPN,但该库上的文档并不清楚如何执行此操作。
解决方案
的输出print_control_identifiers()
不完整(这里没有列出目标文本标签,窗口上有3个静态文本),但幸运的是我的PC上有相同的Cisco VPN客户端。问题是这个“静态”文本是动态的。:) 有两种方法可以处理这种情况。
1)只需创建一个窗口规范并检查此窗口是否存在:
connected_label = window.child_window(title="Connected to Brock AppDMZ VPN.", class_name="Static")
# default timeout is pywinauto.timings.Timings.window_find_timeout (5 sec.)
if connected_label.exists(timeout=10):
pass # do whatever you want
2)依靠这个静态文本的数量,每次需要连接状态时检查它的文本:
label = window.child_window(class_name="Static", found_index=1).wait('exists')
if label.window_text() == "Connected to Brock AppDMZ VPN.":
pass # do whatever you want
推荐阅读
- terraform-provider-azure - 使用 Terraform 在 Azure 中为同一订阅下的所有 VM 创建警报
- python - 提取化学名称的美丽汤
- python - 合并指定字段上的元组
- kotlin - 如果我在视图寻呼机中跳过一个片段,它会暂时可见
- java - 1000 locker java问题不使用数组
- c++ - 如何获得数组的最大乘积
- keras-layer - 如何修复 InvalidArgumentError:输入和过滤器必须具有相同的深度:3 vs 32?
- ld - LLD 与 LD 链接描述文件差异
- python - firestore 中是否有办法获取在 python 中使用 collection_group 查询检索到的文档的完整文档路径?
- python - 无法使用 tweepy (Python) 向 twitter 用户提供快速回复选项