5

我正在使用 pywinauto 进行自动化单击 DiffDaff 软件上的某个按钮。

我的意图是:

  • 第 1 步:打开 DiffDaff 软件

  • 第二步:点击“关于”按钮

    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']'

其中, '', u'DiffDaff - 比较文件、文件夹和网页', u'Internet Explorer_Hidden', u'DiffDaff - 比较文件、文件夹和网页Dialog', 'Dialog'是软件的标题

此外,使用命令'app.dialogs.print_control_identifiers()'知道“关于”按钮的确切位置,有输出:

Button - '&About'   (L750, T388, R834, B411)
    '&About' '&AboutButton' 'Button3'

但是很难理解上面的参数(L750,T388,...是什么/在哪里)-您想解释一下上面参数的所有平均值吗?

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

谢谢。

4

1 回答 1

6

pywinauto需要从应用程序对象到控制方法的 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__方法简化了这种结构。

于 2014-07-07T13:16:16.510 回答