pywinauto:如果应用程序名称中有空格,如何访问应用程序菜单?

时间:2014-10-15 05:16:11

标签: python-2.7 pywinauto

我有一个名为' Syntext Serna' xml编辑器。我可以打开该应用程序,但当我尝试访问它的菜单时,它会给我这样的错误:

Traceback (most recent call last):
File "test.py", line 4, in <module>
app.dlg.MenuSelect("Document->Open")
File "c:\python27\lib\site-packages\pywinauto\application.py", line 238, in __getattr__
ctrls = _resolve_control(self.criteria)
File "c:\python27\lib\site-packages\pywinauto\application.py", line 795, 
in _resolve_control
raise e.original_exception
pywinauto.findbestmatch.MatchError: Could not find 'dlg' in
'[u'Syntext Serna Free 4.3.0-3001QWidget', u'QWidget',
 u'Syntext Serna Free 4.3.0-3001']'

我的代码:

from pywinauto import application
app = application.Application.start(r"C:\Program Files\Syntext\
                                 Serna Free 4.3\bin\serna.exe")
dlg = "Syntext Serna Free 4.3.0-3001"
app.dlg.MenuSelect("Document->Open")

我认为这背后的主要原因是,应用程序名称之间有空格。有没有解决方法呢?

1 个答案:

答案 0 :(得分:3)

dlg名称离实际对话框标题太远了。你需要这样的更接近的名字:

app.Syntext_Serna_Free_4_3_0_3001.menu_select('Document->Open')

将对话框名称与空格/短划线/等匹配的另一种方法是使用按键访问(这种方法也可以抵错拼写错误):

app['Syntext Serna Free 4.3.0-3001'].menu_select('Document->Open')

如果你需要完全相同的标题,只需直接创建WindowSpecification对象(如果你的名称对话/控件很少,这是最可靠的匹配方法):

app.window(title='Syntext Serna Free 4.3.0-3001').menu_select('Document->Open')