暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

UI自动化测试的正确姿势-Airtest第二弹

程序员杨叔 2023-04-06
630

大家好,我是杨叔。每周进步一点点,关注我的微信公众号【程序员杨叔】,获取更多测试开发技术知识!接着上一篇文章:不会编程也能快速写自动化测试! Airtest入门篇,本次分享的内容是:UI自动化测试的正确姿势-Airtest第二弹!


一、背景



Airtest作为一款优秀的自动化测试工具,有着强大的API功能,处理日常自动化测试过程中需要的各类操作。今天就给大家逐一介绍关于设备连接和常用API部分,结合自动化测试中的各类需求,看看如何通过使用Airtest来快速实现。

二、设备连接




1、Android真机连接

  • 请使用USB线连接手机和电脑,手机上出现的允许USB调试 弹窗点击确定

  • 点击连接面板中的刷新ADB 按钮,设备列表将会刷新

  • 点击列表内对应设备的Connect 完成连接

  • 若设备未刷出,点击重启ADB 按钮.


2、IOS真机连接

IOS的连接相对比较复杂,可以参看官方文档链接:https://airtest.doc.io.netease.com/IDEdocs/3.2device_connection/4_ios_connection/


3、Windows窗口连接,可通过以下三种方式:

方式1:选择游戏画面,将会有一个绿色/红色细线框,实时框选出鼠标位置对应的窗口;

方式2:搜索窗口,在弹出的窗口list中选择要连接的窗口直接连接


以上两种都是将窗口嵌入到Airtest IDE中:


如果窗口比较大,不适合嵌入到Airtest中的,或者嵌入后显示异常的,可以在"选项"》"设置"中,勾选上"Windows窗口无嵌入连接"选项:


这样就可以使用无嵌入式的方式来连接窗口:

最后,如果被测的软件是需要全屏显示的,可以通过连接桌面来实现,点击连接桌面按钮:

运行时,将Airtest IDE最小化,让被测软件显示在最上层即可。


三、Airtest辅助窗常用API



想要用好Airtest,辅助窗中的功能是必不可少的,用好它能解决90%以上的操作问题。工欲善其事,必先利其器,因此我们先来介绍怎样使用这些功能来帮助我们解决自动化中常见的需求:


1、touch




最常用的操作,鼠标左键点击。框选你要点击的地方即可。默认是点击框选图片的中心位置。参数:

根据参数可以看出:

  • 可以点击图片,也可以点击绝对坐标(x,y)

  • 可以控制点击的次数。但是实测发现,有时候想双击,设置times=2,
    并不能实现双击效果,而是要用另外一个函数:double_click来实现双击效果

  • 可以设置鼠标左边点击后按住的时间,默认是0.01s, 就是单击效果。如果想实现长按1秒的效果,设置duration=1

  • 可以通过设置right_click=True来实现右键点击效果(仅限windows模式)


2、wait




常用操作,等待当前画面上出现某个匹配的Template图片:



比如你做了一个操作要等几秒下一个页面上的元素才显示出来,通常的做法是强制sleep几秒之后,再操作。而用wait函数,则可以设置每隔多长时间就找一次,找到了就继续下一步,而不是每次都死等那么长的时间,可以提高脚本运行的速度。有以下参数可以设置:

  • v – 要等待出现的目标Template实例

  • timeout – 等待匹配的最大超时时长,默认为None即默认取 ST.FIND_TIMEOUT 的值

  • interval – 尝试查找匹配项的时间间隔(以秒为单位)

  • intervalfunc – 在首次尝试查找匹配失败后的回调函数

示例1:

    # 每3秒查找一次, 120秒之后还没有找到则超时报错
    wait(Template(r"tpl1606821804906.png"), timeout=120, interval=3)

    示例2:

      # 查找目标失败时,指定回调自定义的"notfound"函数
      def notfound():
      print("No target found")
      wait(Template(r"tpl1607510661400.png"), intervalfunc=notfound)

      3. swipe




      在当前设备画面上进行一次滑动操作:

      • v1 – 滑动的起点,可以是一个Template图片实例,或是绝对坐标 (x, y)

      • v2 – 滑动的终点,可以是一个Template图片实例,或是绝对坐标 (x, y)

      • vector – 滑动动作的矢量坐标,可以是绝对坐标 (x,y) 或是屏幕百分比,例如 (0.5, 0.5)

      常用场景1:当前屏幕上没有你要操作的内容,需要手机上滑0.5个屏幕,才能点击你想点击的内容

        w,h=device().get_current_resolution()#获取手机分辨率
        touch([0.5*w, 0.5*h])#点击手机中心位置
        swipe((0.5*w,0.8*h),vector=(0,-0.5),duration=0.1) #在0.1s内上滑0.5个屏幕

        常用场景2:app打开后,有5个介绍页,滑动后才能正式进入app首页,这个时候就可以使用swipe函数来实现:

          # 收取设备的宽和高
          width, height = device().get_current_resolution()
          # 计算滑动点的起始位置和结束位置
          start_pt = (width * 0.9, height 2)
          end_pt = (width * 0.1, height 2)
          # 滑动5次,每次中间睡眠1秒,等待设备响应
          for i in range(5):
          swipe(start_pt, end_pt)
          sleep(1)


          4. exists




          检查设备上是否存在给定目标, 如果未找到目标,则返回False,否则返回目标的坐标:

          常用场景:比如我们进入某个页面时,屏幕上可能会弹出一个弹窗广告,但也有可能不弹。如果弹出了弹窗广告,我们就要先关掉弹窗,然后继续操作下一步。

            # 先判断是否存在弹窗图片,存在就点击弹窗图片上的关闭按钮
            if exists(Template(r"弹窗图片.png")):
            touch(Template(r"弹窗图片上的关闭按钮.png"))


            END




            以上就是本次的全部内容,如果对你有帮助,欢迎关注+点赞+分享,你的支持就是作者更新最大的动力!下一篇文章,我们将继续分享Airtest的其他常用API,看看如何使用它们解决各类自动化测试需求!

            最后,欢迎加入杨叔的测试交流群,沟通交流日常测试工作相关内容,三个臭皮匠赛过诸葛亮,2023一起升职加薪,学习进步!可扫码添加杨叔的微信号,备注:进群

            往期精彩文章推荐




            文章转载自程序员杨叔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论