• 客户端自动化测试解决方案之鼠标&键盘操作


    我们在实际的工作中,会有场景需要做“端到端的自动化”,这部分自动化实现成本较高,稳定性较差。最近我们部门也涉及到这样的业务场景,同时我也解决这个场景下做自动化的痛点。下面我们就来给大家讲下,我是如何解决这个问题的。

     

    业务场景

     

     

    我们会在平台侧进行一系列的配置,然后在windows客户端上安装我们的客户端软件,在进行操作,去验证平台侧的配置是否符合期望

     

    此时我们遇到2个难题

    1、如果操作客户端,我们的客户端是一个GUI的客户端软件,这部分是最大的难题。

    2、如果解决问题1,我们该如何远程控制windows去执行我们的自动化脚本呢?大家知道,远程执行windows命令比执行linux的命令复杂,更重要的他非常不稳定

     

     

    解决方案

    1、先来解决难题2,这里我们是通过这样的方案去解决的

    我们在windows客户端上起了一个fastAPI框架,我们可以通过测试框架执行web框架的api,在由fastAPI框架根据不同的接口,去本地执行对应的视图函数,并返回执行结果即可。是不是很巧妙。这部分比较简单,我就不展开来说了。

     

     

    2、那么还剩下一个难题,如果控制GUI客户端呢?

    实际上我们操作客户端主要也是通过鼠标和键盘来操作

    所以我们采用的pyautogui+openCV方式,这一部分也是这篇博客的主要内容。帮助大家实现,如果做采用pyautogui+openCV的方案实现GUI自动化方案

    下面开始整体,正常学习GUI自动化的基础方案,今天先讲下鼠标操作和键盘操作

    pyautogui学习:鼠标操作

    1、安装pyautogui模块,直接pip安装即可

     

     

    2、实现鼠标操作

    这部分我们学习如何移动鼠标。先来介绍下pyautogui对坐标的处理

     

    如果我们的屏幕的分辨率是 100*100,那么左上角的坐标就是0*0,其他点的坐标就和我上图中的一致

    我们可以通过下面的命令获取当前屏幕的分辨率

    1
    2
    3
    4
    5
    import pyautogui
     
    print(pyautogui.size())
     
    # Size(width=1280, height=720)

      

    3、移动鼠标

    由前面的知识我们知道,pyautogui是通过坐标来移动鼠标的,所以移动鼠标就是通过传递不同的坐标来进行操作

    a、移动到绝对位置,duration的意思,在2s内完成操作,建议这个参数大家要传,不然会影响gui操作的稳定性

    1
    pyautogui.moveTo(500,550,duration=2)

      

    b、移动到相对位置

    1
    pyautogui.moveRel(-100,-100,duration=3)

      

    4、获取鼠标当前的坐标

    1
    2
    3
    4
    5
    6
    7
    8
    pyautogui.moveTo(500,550,duration=2)
     
    print(pyautogui.position())
    # Point(x=500, y=550)
    pyautogui.moveRel(-100,-100,duration=3)
     
    print(pyautogui.position())
    # Point(x=400, y=450)

      

    5、鼠标的点击操作

    1
    2
    3
    4
    5
    pyautogui.click(371,700,button="left")   #点击左键
    time.sleep(1)
    pyautogui.click(1161,1161,button="left")
    time.sleep(1)
    pyautogui.click(790,273,button="right"#点击右键

      

    鼠标其他不常见的操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    pyautogui.mouseDown(button="left")
    #按下鼠标左键
    pyautogui.mouseUp(button="right")
    #松开鼠标右键
     
    pyautogui.doubleClick()
    # 双击左键
    pyautogui.rightClick()
    # 双击右键
    pyautogui.middleClick()
    # 双击中键

      

    6、鼠标拖动

    可以操作画图的画笔,或者拖动文件

    1
    2
    3
    pyautogui.dragRel(100,200,duration=0.3,button="left")
     
    pyautogui.dragTo(100,200,duration=0.3,button="left")

      

    7、鼠标滚动操作

    1
    pyautogui.scroll(200)

      

     

    pyautogui学习:键盘操作

    1、键盘录入内容

    1
    pyautogui.typewrite("hello python",interval=1)

      

    1
    2
    3
    pyautogui.typewrite(message="abcd")
     
    pyautogui.typewrite(message=["!","A","^","1","2","3"])

      

    message可以传递字符串和列表,同样也会自动处理大写和特殊字符,同样我们也建议也传递一个interval参数,意思是输入每个字符相隔几秒钟

     

    2、特殊键该如何按呢

    采用press方法

    1
    2
    3
    4
    5
    pyautogui.typewrite(message="abcd",interval=2)
     
    pyautogui.press("enter")   #按下回车键
     
    pyautogui.typewrite(message=["!","A","^","1","2","3"],interval=2)

      

    同样还有其他的特殊键,大家应该一看就可以看的出来

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    esc
     
    shiftleft
    shiftright
     
    altleft
    altright
     
    ctrlleft
    ctrlright
     
    tab
     
    backspace
    delete
     
    pageup
    pagedown

      

     

    3、组合键该如何按呢?

    可以采用下面的方法,先用keydown按下一个键,在按一个组合键,最后在用keyup松开键

    1
    2
    3
    4
    5
    6
    pyautogui.press("enter")
    pyautogui.typewrite("hello python",interval=0.2)
    pyautogui.press("enter")
    pyautogui.keyDown("shift")
    pyautogui.press("5")
    pyautogui.keyUp("shift")

      

     

     不过我们一般采用另外一个方法来做,就是热键的方法。pyautogui会帮我们按下组合键,然后按照相反的顺序松开键

     

    1
    pyautogui.hotkey("ctrl","v")

      

     通过上面的方法我们基本可以对鼠标和键盘进行操作,可以完成我们常见的gui操作,下一篇我们来学习下pyautogui+openCV的操作

     

    下一篇博客的地址我贴到这里来,方便大家查阅:https://www.cnblogs.com/bainianminguo/p/17666934.html

  • 相关阅读:
    vue中axios的使用方法
    解决webpack打包、编译、热更新Node内存不足问题
    音视频流媒体开发难以学习?今天教你如何“丝滑”入门
    使用 Python (Pyxel)制作一个经典的 Lode Runner 游戏
    使用 vscode 配置安装 clang-format
    【面经】讲一下spring aop
    【Linux】5.0基础IO
    vue-cli3.0初始化项目
    C/C++与C#随笔
    【Java八股文总结】之集合
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/17666180.html