zoukankan      html  css  js  c++  java
  • python 实现 PC 客户端自动化快速入门:pywinauto !

    本文转载自:http://www.lemfix.com/topics/420

    一、前言

    ​ 我们柠檬班的小可爱,在学完我们柠檬班自动化的课程之后,就掌握了接口自动化,web自动化,app自动化,这些工作中常用的自动化技能,在工作足以够应对90%以上的自动化需求了。不过近期也有部分小可爱在问PC端自动化怎么去做?对这个技术比较好奇,使用python可以不可以实现PC客户端自动化测试?答案当然是可以的,所以今天在这边专门整理了一遍文章,和大家一起聊聊如何使用python做PC端自动化!

    二、环境安装

    ​ 使用python实现来做PC端自动化,前提是先安装好python,那么还需要用到一个第三方库:pywinauto,在这边我们首先需要安装好这个库,安装命令如下:

    pip install pywinauto
    

    三、使用说明

    安装好了之后,关于使用说明大家可以参照官方文档上的说明,如下图:

     

    上述内容翻译如下:

    就是说在我们安装好Pywinauto之后,首先要确定哪种可访问性技术(pywinauto的backend)可以用于我们的应用程序,在windows上受支持的辅助功能技术有两种:

    • Win32 API (backend="win32") 默认backend
    • MS UI Automation (backend="uia")

    ​ 如果您不能确定程序到底适用于那种backend,可以借助于GUI对象检查工具来做,常用的检查工具有Inspect.ex,Spy++ 等,这个不做过多介绍,大家自行学习和下载,使用很简单,也非常便捷。

    四、快速入门

    在安装好环境之后,并且确定了应用程序适用的backend,那么接下来我们就可以使用Pywinauto这个模块来对应用程序进行自动化操作了

    1、连接到应用程序

    这边用window自带的记事本程序作为案例,给大家做讲解

    连接应用程序,首先需要用到pywinauto.application.Application()来创建一个应用程序对象,然后再连接到应用程序,有如下两种方法:

    • 方式一:直接通过start方法打开操作的应用程序,
    from pywinauto import application
    # 方式一:创建应用程序时可以,指定应用程序的合适的backend,start方法中指定启动的应用程序
    app = application.Application(backend='uia').start('notepad.exe')
    
    • 方式二:连接已经打开应用程序,可以通过connect连接到指定的应用程序
    from pywinauto import application
    # 方式二:查看要打开的程序进程号,通过process指定进程号连接
    app = application.Application().connect(process=19035)
    

    运行以上代码,就会自动打开记事本记事本,如下

     

    2、窗口选择

    打开这个窗口之后,我们要操作该窗口的话,那么就的先选中这个窗口,关于窗口的选择有一下几种方式

    # 方式一 :不适用于窗口名为中文的
    wind_1 = app.窗口名  
    
    # 方式二 :窗口名可以为中文 
    wind_2 = app["窗口名"]
    
    # 案例使用:选择上面打开的计算器程序窗口
    wind_calc = app['无标题 - 记事本']
    

    3、控件操作

    程序窗口中的每一块内容,都是一个控件,我们要对这个窗口的某一块内容进行操作,就需要选择到对应的控件,

    • 获取所有控件

    我们可以通过print_control_identifiers()这个方法,来获取这个窗口下的直接子控件,如下:

    app['无标题 - 记事本'].print_control_identifiers()
    

    打印出来的结果如下:

     

    上面打印出来的内容分别对应窗口种的以一下部分:

     
    • 选择控件

    关于控件选择的方法有好几种,最简单的方法如下:

    # 选择控件的方法
    wind_calc = app["窗口名"]["控件名"]
    
    # 案例操作:选择编辑窗口
    edit = app['无标题 - 记事本']['Edit']
    
    
    • 内容输入

    在上面选择到编辑窗口之后,我们就可以进行内容输入了,

    内容输入的方法:type_key()

    # 在编辑栏种输入内容
    edit.type_keys("柠檬班")
    edit.type_keys("python自动化")
    edit.type_keys("musen")
    

    运行结果如下:

     

    4、键盘操作

    输入完上述内容之后,接下来我们要修改编辑框中的内容,

    通过键盘完成以下操作:全选(ctrl+A) 复制(Ctrl+C) 粘贴(Ctrl+V) 回车(Enter) 粘贴(Ctrl+V)

    • pywinauto.keyboard.send_key

      pywinauto模拟操作键盘,需要使用到 pywinauto.keyboard.send_keys这个方法

      # 导入模块
      from pywinauto.keyboard import send_keys
      
      # 全选(ctrl+A)   
      send_keys("^a")
      
      # 复制(ctrl+C) 
      send_keys("^c")
      
      # 粘贴(ctrl+V)
      send_keys("^v")
      
      # 回车键
      send_keys("{VK_RETURN}")
      
      # 粘贴(ctrl+V)
      send_keys("^v")
      
      

      运行结果如下:

    • 常见的按键操作
      • ##### 字母按键用按键小写字母表示
      • 常用的一些按键
        ESC键:VK_ESCAPE 
        回车键:VK_RETURN 
        TAB键:VK_TAB 
        Shift键:VK_SHIFT 
        Ctrl键:VK_CONTROL
        Alt键:VK_MENU
        
      • 按键修饰符
        # 对于一些常用的按键,可以通过修饰符来表示,使用的时候比较方便
        '+': {VK_SHIFT}
        '^': {VK_CONTROL}
        '%': {VK_MENU} Alt# 上面:全选(ctrl+A)   复制(ctrl+C)   粘贴(ctrl+V)就使用的是修饰符^来代表ctrl
        
      • 更多的键盘操作大家可以参考官网文档

    5、鼠标操作

    pywinauto操作鼠标的所有方法都封装在pywinauto. mouse这个模块中,使用鼠标之前,首先要导入mouse模块,mouse模块中包含了一系列的鼠标操作事件

    • pywinauto. mouse
      • 鼠标移动:move方法
        • move(coords=(x轴坐标,y轴坐标))
        • 缓慢移动鼠标案例
        for i in range(10):
             x = 10 * i
             y = 10 * i
             time.sleep(0.5)
             # 移动鼠标
             mouse.move(coords=(x, y))
        
      • 鼠标点击:click
        # button指定左击还是右击,coords指定鼠标点击的位置
        
        # 3.1、鼠标单击
        # 指定位置,鼠标左击
        mouse.click(button='left', coords=(40, 40))
        # 指定位置  鼠标右击
        # mouse.click(button='right', coords=(100, 200))
        # 3.2 鼠标双击
        mouse.double_click(button='left', coords=(140, 40))
        
        # 4 按下鼠标:press
        # 将属性移动到(140,40)坐标处按下
        mouse.press(button='left', coords=(140, 40))
        
        # 5 释放鼠标:repleace
        # 将鼠标移动到(300,40)坐标处释放,
        mouse.release(button='left', coords=(300, 40))
        
        # 6、右键单击指定坐标
        mouse.right_click(coords=(400, 400))
        
        # 7、鼠标中键单击指定坐标(很少用的到)
        mouse.wheel_click(coords=(400, 400))
        
        # 8 滚动鼠标
        # coords:指定鼠标的坐标位置。
        # wheel_dist指定鼠标滚轮滑动的次数,正数往上,负数往下。
        mouse.scroll(coords=(1200,300),wheel_dist=-3)
        

    五、说明

    关于pywinauto模块的基本使用就该大家介绍到这里了,对pc端自动化感兴趣的同学可以往这个方向去深入学习。

  • 相关阅读:
    line-height 行高
    CSS菜单横竖布局要点
    鬼吹灯之精绝古城迅雷下载
    sublime less高亮插件
    Swiper说明&&API手册
    jQuery的deferred对象详解
    js中typeof与instanceof的不同用法
    js中apply方法的使用
    Javascript获取当前时间戳的方法
    json对象和json字符串转换方法
  • 原文地址:https://www.cnblogs.com/Simple-Small/p/12035446.html
Copyright © 2011-2022 走看看