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

Lit*_*ken 5 pywinauto

我正在使用pywinauto自动化点击DiffDaff软件上的一些按钮.

我的意图是:

  • 第1步:打开DiffDaff软件

  • 第2步:单击"关于"按钮

    from pywinauto.application import Application
    
    app = Application.start("C:\Program Files\DiffDaff\DiffDaff.exe")
    
    app.About.Click()
    
    Run Code Online (Sandbox Code Playgroud)

但是,我陷入了第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']'
Run Code Online (Sandbox Code Playgroud)

哪里,'',u'DiffDaff-比较文件,文件夹和网页',u'Internet Explorer_Hidden',u'DiffDaff-比较文件,文件夹和网页对话','对话'是sotfware的标题

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

Button - '&About'   (L750, T388, R834, B411)
    '&About' '&AboutButton' 'Button3'
Run Code Online (Sandbox Code Playgroud)

但是很难理解上面的参数(L750,T388,......的内容/位置) - 你想解释上面所有参数的平均值吗?

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

谢谢.

Vas*_*bov 5

pywinauto需要从Application对象到控制方法的2级层次结构.任何电话的结构都是

app.<DialogName>.<ControlName>.<method>(<params>)
Run Code Online (Sandbox Code Playgroud)

在你的情况下它应该看起来像

app.Dialog.About.click()
Run Code Online (Sandbox Code Playgroud)

如果您需要更真实的点击,请使用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
Run Code Online (Sandbox Code Playgroud)

提到的代码等同于以下内容:

app.window(best_match='Dialog', top_level_only=True).child_window(best_match='About').click()
Run Code Online (Sandbox Code Playgroud)

pywinauto通过重写__getattribute__方法简化这种结构.