【问题标题】:How to perform Click action on Button or Text field by pywinauto如何通过pywinauto对按钮或文本字段执行单击操作
【发布时间】:2019-01-14 00:01:50
【问题描述】:

我正在使用 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']'

其中, '', 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,...是什么/在哪里) - 你想解释一下上面所有参数的平均值吗?

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

谢谢。

【问题讨论】:

    标签: pywinauto


    【解决方案1】:

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

    【讨论】:

    • 谢谢,它有效!我想知道“(L750,T388,R834,B411)”将创建(-|-)-是吗。以及“'&About''&AboutButton''Button3'”是什么意思
    • '&About' 是一个真正的 WindowText() 按钮。 “按钮”是 FriendlyClassName()。 __getattr__ 方法的所有可能名称都有 3 个变体:''、'' 和 'i' 其中 i 是此类控制的索引.例如,您可以通过“Button0”或“Button1”来识别第一个按钮,第二个按钮名称可以是“Button2”,依此类推。这对于没有文本或文本相同的情况很有用。
    • "(L750, T388, R834, B411)" 是控件的绝对屏幕矩形。 L 表示“左”,R - “右”等。
    • 这个“对话框”是什么。?它是指窗口的标题吗,我如何找到这个。?
    猜你喜欢
    • 1970-01-01
    • 2022-12-02
    • 2015-09-04
    • 2013-04-04
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多