如何通过pywinauto对Button或Text字段执行Click操作

时间:2014-07-07 08:34:03

标签: pywinauto

我正在使用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,......的内容/位置) - 您想解释上述所有参数的平均值吗?

执行“点击”按钮的方式?

感谢。

1 个答案:

答案 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__方法简化了此类构造。