我正在使用pywinauto进行自动化点击DiffDaff软件上的某个按钮。
我的意图是:
步骤1:打开DiffDaff软件
第2步:点击“关于”按钮
from pywinauto.application import Application
app = Application.start("C:\Program Files\DiffDaff\DiffDaff.exe")
app.About.Click()
但是,我陷入了第2步,控制台显示错误:
File "build\bdist.win32\egg\pywinauto\application.py", line 238, in __getattr__
File "build\bdist.win32\egg\pywinauto\application.py", line 788, in _resolve_control
pywinauto.findbestmatch.MatchError: Could not find 'About' in '['', u'DiffDaff - Compare Files, Folders And Web Pages', u'Internet Explorer_Hidden', u'DiffDaff - Compare Files, Folders And Web PagesDialog', 'Dialog']'
Where,'',u'DiffDaff - 比较文件,文件夹和网页',u'Internet Explorer_Hidden',u'DiffDaff - 比较文件,文件夹和网页对话','对话'是sotfware的标题
另外,使用命令'app.dialogs.print_control_identifiers()'
知道“关于”按钮的确切位置,有输出:
Button - '&About' (L750, T388, R834, B411)
'&About' '&AboutButton' 'Button3'
但是很难理解上面的参数(L750,T388,......的内容/位置) - 您想解释上述所有参数的平均值吗?
执行“点击”按钮的方式?
感谢。
答案 0 :(得分:5)
pywinauto
需要从Application对象到控制方法的2级层次结构。任何电话的结构都是
app.<DialogName>.<ControlName>.<method>(<params>)
在你的情况下它应该看起来像
app.Dialog.About.click()
如果您需要更真实的点击,请使用click_input()
移动光标并以用户身份点击控件。 click()
仅发送WM_CLICK
,但也不太可靠。
print_control_identifiers()
方法打印以下信息:
<ControlType> - '<Name a la WindowText>' (<rectangle>)
possible names which are most likely useful for object attribute access
提到的代码等同于以下内容:
app.window(best_match='Dialog', top_level_only=True).child_window(best_match='About').click()
pywinauto
通过覆盖__getattribute__
方法简化了此类构造。