如何使用Pywinauto匹配功能

2024-04-29 03:39:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python脚本,它打开一个应用程序,然后使用pywinauto模块将焦点设置到该应用程序:

#Module for starting app + controlling app window
from pywinauto.application import Application
from pywinauto.controls.hwndwrapper import HwndWrapper

#Module for delay
import time

#Application path
command="C:\Program Files\Basler Electric\BESTCOMSPlus\BESTCOMSPlusShell.exe"
#command="C:\Program Files\Internet Explorer\iexplore.exe"

app = Application()
app.start(command)
time.sleep(10)
HwndWrapper(app.BEST.Edit.handle).set_focus()
#HwndWrapper(app.IEFrame.Edit.handle).set_focus()

我最初用internetexplorer测试了这段代码(如两行注释中所示),它工作正常。现在,我已经切换到实际的应用程序,我想打开,我得到以下错误:

File "C:\Python36\lib\site-packages\pywinauto-0.6.7-py3.6.egg\pywinauto\findbestmatch.py", line 533, in find_best_control_matches
    raise MatchError(items = name_control_map.keys(), tofind = search_text)
pywinauto.findbestmatch.MatchError: Could not find 'BEST' in 'dict_keys(['BESTCOMSPlus®WindowsForms10.Window.8.app.0.1ed9395_r6_ad1', 'WindowsForms10.Window.8.app.0.1ed9395_r6_ad1', 'BESTCOMSPlus®'])'

如果我尝试使用一个较长的字符串进行匹配,比如说BESTCOMSPlus,我会得到这样一个错误,它似乎认为我在尝试匹配Edit

File "C:\Python36\lib\site-packages\pywinauto-0.6.7-py3.6.egg\pywinauto\findbestmatch.py", line 533, in find_best_control_matches
    raise MatchError(items = name_control_map.keys(), tofind = search_text)
pywinauto.findbestmatch.MatchError: Could not find 'Edit' in 'dict_keys(['', 'WindowsForms10.MDICLIENT.app.0.1ed9395_r6_ad1', '0', '1', '2', 'WindowsForms10.Window.8.app.0.1ed9395_r6_ad1', '3', 'WindowsForms10.Window.8.app.0.1ed9395_r6_ad10', 'WindowsForms10.Window.8.app.0.1ed9395_r6_ad11', 'WindowsForms10.Window.8.app.0.1ed9395_r6_ad12', '4', 'WindowsForms10.Window.8.app.0.1ed9395_r6_ad13', '5', 'WindowsForms10.Window.8.app.0.1ed9395_r6_ad14', '6', 'WindowsForms10.Window.8.app.0.1ed9395_r6_ad15'])'

基于this问题,我知道我在隐式地使用best_match函数,我认为它将返回BESTCOMSPlus®BESTCOMSPlus®WindowsForms10.Window.8.app.0.1ed9395_r6_ad1窗口。你知道吗

这是因为两个窗口的名称中有相同的字符串吗?为什么使用较长的字符串会产生这种错误?你知道吗

我的Python版本是3.6.7,我一直在IDLE中测试


Tags: inimportapp应用程序applicationkeysfindedit