51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 465|回复: 0
打印 上一主题 下一主题

[转贴] Airtest结合Poco对控件实施精准截图!

[复制链接]
  • TA的每日心情
    无聊
    2024-9-27 10:07
  • 签到天数: 62 天

    连续签到: 1 天

    [LV.6]测试旅长

    跳转到指定楼层
    1#
    发表于 2023-11-23 11:54:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    1.前言
    最近在Q群内发现有个小伙伴提出了一个很有趣的脚本需求,想要实现“通过选择器获取到了控件,然后截图这个控件范围”,根据我们的Airtest的局部截图接口以及poco控件的属性查询接口是可以很快实现的~

    2.接口查找
    首先我们需要知道我们应该怎么实现用脚本去进行局部截图,我们可以通过翻阅Airtest的API文档发现,Airtest提供了 crop_image(img, rect) 方法可以帮助我们实现局部截图:
    观察接口需要传入的参数是需要截图范围的左上角以及右下角坐标,那我们可以先识别控件,打开poco点击识别控件发现控件有很多属性,仔细观察发现,我们需要使用到的是pos(控件位置中心坐标)以及size(控件大小范围),通过计算即可得出截图范围的左上角以及右下角坐标啦。
    那我们应该如何获取控件的这两个数值呢,我们可以查看poco的API文档,翻阅一下发现,poco还有获取控件该参数的接口,这下就可以轻而易举地得到所需的数据啦~
    得到数据之后就是结合以上接口的传输数据来看,我们只需要计算得到控件的左上角坐标以及右下角的坐标后即可裁出我们想要的图片了

    3.代码演示
    __author__ = "AirtestProject"
    from airtest.core.api import *
    from airtest.aircv import *
    auto_setup(__file__)
    from poco.drivers.android.uiautomation import AndroidUiautomationPoco
    poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
    #获取屏幕分辨率
    android = device()
    xy=android.get_current_resolution()
    screen = G.DEVICE.snapshot()
    #使用poco去寻找控件
    if poco(text="游戏增强器").exists():
        a=poco(text="游戏增强器").get_position()#获取控件的中心坐标
        b=poco(text="游戏增强器").get_size()#获取控件的实际长宽
        #计算左上角坐标,转化成绝对坐标
        x1=int((a[0]-0.5*b[0])*xy[0])
        y1=int((a[1]-0.5*b[1])*xy[1])
        #计算右下角坐标,转化成绝对坐标
        x2=int((a[0]+0.5*b[0])*xy[0])
        y2=int((a[1]+0.5*b[1])*xy[1])
        # 局部截图
        screen = aircv.crop_image(screen,(x1,y1,x2,y2))
        # 保存局部截图到log文件夹中
        try_log_screen(screen)

    4.小结
    通过代码需求,我们可以先将需求拆分后逐个击破,找到所需接口后就可以进行拼接使用啦,AirtestIDE也是集成了Python的代码环境,可以正常使用python的基础语法的~如果自己有更多的第三方库进行编写脚本的话,也是可以通过该方法使用自己的本地python环境运行我们的脚本。

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-22 09:29 , Processed in 0.066509 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表