zoukankan      html  css  js  c++  java
  • pywinauto 使用

    Pywinauto是基于Python开发的,用于自动化测试的脚本模块,主要操作于Windows标准图形界面。它可以允许你很容易的发送鼠标、键盘动作给Windows的对话框和控件。 
    其中,最主要功能为对windows标准控件的一系列动作可编程处理。包括对窗口的指定、鼠标或键盘操作、获得控件属性等等。程序的开始为对所需应用的启 动或连接。获得程序连接后,pywinauto通过窗口的名称、类名、是否可见等属性寻找匹配的窗口,进而通过类似方法寻找用户所需的控件,并获得相应的 句柄。之后,用户可通过易理解的编程方式对指定控件进行相关操作的编程,包括鼠标点击、键盘输入、判断控件间关系、获取控件属性等。

    官方网站:https://pywinauto.readthedocs.io/en/latest/contents.html

    pywinauto使用

    首先,导入这个模块

    from pywinauto.application import Application
    • 1

    (一) 判断程序的backend

    注意,首先需要判断你要进行的程序是用什么语言写的,在实例化的时候会有区别,主要是判断backend是什么。 
    这里写图片描述 
     
    那么如何判断程序的backend是’win32’还是’uia’呢?官方文档中推荐使用spy++和inspect来检查。有人专门整理了一下,放在github上了https://github.com/blackrosezy/gui-inspect-tool。 
    spy++咱们之前讲过。接下来将将如何使用inspect来判断backend的类别。

    Switch Inspect.exe into UIA mode (using MS UI Automation). If it can show more controls and their properties than Spy++, probably the "uia" backend is your choice.
    • 1

    将inspect左上角的下拉列表中切换到“UI Automation”,然后鼠标点一下你需要测试的程序窗体,inspect就会显示相关信息。 
    下图为点击window文件夹的结果,inspect中显示了相关的信息,如下图所示。说明backend为uia。 
    这里写图片描述

    再来看点击 屏幕录像专家程序的结果 
    这里写图片描述
    inspect中显示拒绝访问,说明屏幕录像专家程序的backend应该是win32。

    (二)确定自动化入口点

    这里主要是限制自动化控制进程的范围。如一个程序有多个实例,自动化控制一个实例,而保证其他实例(进程)不受影响。 
    主要有两种对象可以建立这种入口点——Application() , Desktop(). 
    Application的作用范围是一个进程,如一般的桌面应用程序都为此类。 
    Desktop的作用范围可以跨进程。主要用于像win10的计算器这样包含多个进程的程序。这种目前比较少见。使用方法见entry-points-for-automation

    (三)连接到进程

    建立好入口后,我们需要连接到进程中。这里有两种方法: 
    - 重新开启一个进程。使用Application对象的start()方法

    start(self, cmd_line, timeout=app_start_timeout)  # instance method:
    • 1

    这里的cmd_line参数就是你使用命令行启动程序的命令语句。所以可以很方便的实现带输入参数的程序启动。 
    启动屏幕录像专家,可以使用如下代码:

    app = Application().start(r"D:Program Files (x86)	lxsoft屏幕录像专家 共享版 V2017屏录专家.exe")
    • 1
    • 连接到已有的进程。使用Application对象的connect()方法。这个方法对已有进程的绑定非常灵活。 
      1.使用进程ID (PID)进行绑定。
    app = Application().connect(process=19188)
    • 1

    进程的PID可以在任务管理器中查看。 
    这里写图片描述

    2.使用窗口句柄绑定

    app = Application().connect(handle=0x00230DB6)
    • 1

    窗口句柄可以在Spy++中查看 
    这里写图片描述

    3.使用程序路径绑定

    app = Application().connect(path=r"D:Program Files (x86)	lxsoft屏幕录像专家 共享版 V2017屏录专家.exe")

    4.使用标题、类型等匹配

    app = Application().connect(title_re="屏幕录像专家.*", class_name="TMainForm")

    第1、2种方法通用性不强,每次运行ID和窗口句柄都可能不一样。第3种方法最直接简单(j建议使用),而第4种方法灵活性最强。

    (四) 选择菜单项

    个人感觉pywinauto最方便的地方之一就是能够很轻易的操作菜单,而且对于多级菜单毫无压力。 
    这里写图片描述

    下面介绍两种方法来操作它: 
    - 使用menu_select()函数进行选择 
    要从屏幕录像专家程序的菜单选中转换工具->EXE/LXE转成MP4。只需要在python中加入如下语句:

    dlg_spec = app.window(title='屏幕录像专家 V2017')
    dlg_spec.menu_select(r"转换工具->EXE/LXE转成MP4")
    • 使用快捷键进行选择 
      可以看到,菜单的每个选项都对应着快捷键,可以使用组合的快捷键直接访问我们需要的选项。 
      使用type_keys()函数,这里需要的快捷键是Alt+T+P:
    dlg_spec = app.window(title='屏幕录像专家 V2017')
    dlg_spec.type_keys('%TP')

    对于一些特殊符号的快捷键,对应的码表如下:

    SHIFT                            +      
    CTRL                             ^      
    ALT                               %
    空格键                            {SPACE}
    
    BACKSPACE                        {BACKSPACE}、{BS}   or   {BKSP}      
    BREAK                            {BREAK}      
    CAPS   LOCK                      {CAPSLOCK}      
    DEL   or   DELETE                {DELETE}   or   {DEL}      
    DOWN   ARROW                     {DOWN}      
    END                              {END}      
    ENTER                            {ENTER}   or   ~      
    ESC                              {ESC}      
    HELP                             {HELP}      
    HOME                             {HOME}      
    INS   or   INSERT                {INSERT}   or   {INS}      
    LEFT   ARROW                     {LEFT}      
    NUM   LOCK                       {NUMLOCK}      
    PAGE   DOWN                      {PGDN}      
    PAGE   UP                        {PGUP}      
    PRINT   SCREEN                   {PRTSC}      
    RIGHT   ARROW                    {RIGHT}      
    SCROLL   LOCK                    {SCROLLLOCK}      
    TAB                              {TAB}      
    UP   ARROW                       {UP}     
    +                                {ADD}      
    -                                {SUBTRACT}      
    *                                {MULTIPLY}      
    /                                {DIVIDE}
    F1                               {F1} 
    F2                               {F2} 
    F3                               {F3} 
    .....
    F15                             {F15} 
    F16                             {F16} 
    • 束后,EXE转MP4的插件窗口就弹出来了。

    from:https://blog.csdn.net/shawpan/article/details/78170117

  • 相关阅读:
    eclipse
    ORA00904:标识符无效,preparedstatement
    mysql 创建用户
    web 默认servlet
    https tomat
    gzip
    sftp 上传文件
    jquery dwrutil confilit
    xmlbeans读写xml文件
    敏捷开发“松结对编程”实践大型团队篇
  • 原文地址:https://www.cnblogs.com/mxhmxh/p/9367661.html
Copyright © 2011-2022 走看看