【问题标题】:Pywinauto - How to read the text within a pop up window to identify it?Pywinauto - 如何阅读弹出窗口中的文本以识别它?
【发布时间】:2017-03-18 01:57:52
【问题描述】:

我正在尝试使用 pywinauto 远程控制有时会在启动时显示警告窗口的 Windows 应用程序。

下面的代码标识了窗口,因为它没有菜单。

我想阅读弹出文本以查找短语“请联系您的系统管理员”。在那个弹出窗口中知道它是 对的。

mywindows = pywinauto.findwindows.find_windows(title_re=".*MyProgramTitle")

# proof that two windows are found
print(len(mywindows))

for handle in mywindows:
    print('\nhandle {}'.format(handle))

    app = Application().connect(handle=handle)
    navwin = app.window(handle=handle )

    if not navwin.menu_items():
        # no menu - I bet it's a pop up
        print('{} is the window I\'m looking for'.format(handle))
        navwin.print_control_identifiers()

上面的代码打印出所有的windows信息,包括 "静态 - '位置映射失败。请联系您的系统管理员。'"

但我需要捕获该打印输出以进一步处理它。

【问题讨论】:

    标签: python python-3.x automation pywinauto


    【解决方案1】:

    作为一个 hacky 解决方案,我浏览了 print_control_identifiers() 发现这种方式可以循环窗口的控件

    navwin.print_control_identifiers()
    
    for x in navwin.descendants():
        print (x.window_text())
        print (x.class_name())
    

    【讨论】:

      【解决方案2】:

      find_windows 是非常底层的自动化入口点。使用 WindowSpecification 对象,您可以等待打开所需的对话框/控件,或者只是检查它是否存在(所有这些都带有自定义超时)。

      更详细的解释见Getting Started Guide

      您可以使用exists()visible() 方法(返回布尔值)代替wait('exists')wait('visible'),如果失败会引发异常。

      你的情况可能是这样的:

      static = app.DialogName.child_window(title_re='.*Please contact your system administrator.',
                                           class_name_re='Static')
      if static.exists(timeout=20): # if it opens no later than 20 sec.
          app.DialogName.OK.click()
      

      【讨论】:

      • 谢谢,我花了很多时间阅读入门指南。您的方法要求我需要知道 Dialogname。找出这一点目前是一个挑战。如果有多个具有相同标题的对话框(其中只有一个具有所需的文本),这种方法会起作用吗? app.DialogName.OK.click() 怎么会知道它需要点击 static 而不是任何其他同名窗口?
      • 对于默认的backend='win32',您可以使用app.windows() 处理所有顶级窗口。说print [wnd.window_text() for wnd in app.windows()]。这就是如何知道DialogName
      • 如果有多个同名对话框,可以使用app.window(title='Dialog name', active_only=True) 而不是app.DialogName 来消除搜索条件的歧义。或者更详细的选择:app.window(title='Dialog name', found_index=0)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      相关资源
      最近更新 更多