Airtest工具根据App页面文字信息提取坐标进行截图保存在自定义文件夹

Airtest工具根据App页面文字信息提取坐标进行截图保存在自定义文件夹

一、项目背景

  • 在一个项目中,选项被选中和未选中的节点元素的属性值无变化,通过AI识别率达不到百分百,想着通过计算图片的HSV值来判断选择能否被选中。(HSV比较友好,人更容易理解,为啥不要RGB是因为颜色模型太复杂,图片计算的RGB值不好判断颜色)回到正题上来,图片计算值时首先要扣出app选项的图片。看了网上好多资料,知识点比较零碎,我自己写了一个大体函数,有小伙伴遇到通用问题后就可以自己将函数粘贴的自己项目中,记住要带包。

二 、 解决思路及方法

  • airtest工具根据app页面信息提取坐标进行截图保存在自定义文件夹,关键词app页面信息就是页面上的文字,根据文字提取文字的坐标和尺寸(计算出的坐标和尺寸是相当App整个页面长宽百分比,需要获取整个页面的长宽,通过百分比计算定位到左上和右下坐标),通过坐标和尺寸计算出左上和右下的坐标值,通过这两个坐标值进行截图并保存在自定义文件下。在python自动化测试中,批量截图的文件命名以时间戳进行命名。直接上代码。

Airtest工具根据App页面文字信息提取坐标进行截图保存在自定义文件夹_第1张图片
Airtest工具根据App页面文字信息提取坐标进行截图保存在自定义文件夹_第2张图片

Airtest工具根据App页面文字信息提取坐标进行截图保存在自定义文件夹_第3张图片

# -*- encoding=utf8 -*-
__author__ = "Administrator"

from airtest.core.api import *
from airtest.aircv import *

from airtest.core.api import *
from airtest.core.api import *
from airtest.aircv import *
from PIL import Image

from PIL import Image

auto_setup(__file__)


from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
# 刷脚本禁止写函数调用
screen = G.DEVICE.snapshot() 
# 局部截图

# 获取屏幕尺寸
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
android_poco= AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
screen_with, screen_height = android_poco.get_screen_size()
print("屏幕的宽度",screen_with,"屏幕的长度", screen_height)




def txt_zuo_biao_jie_tu(jiedian):
    
    print(len((jiedian)))
    for jiedian_i in range(len(jiedian)):
        print("开始计算")
        # 获取等级文本====成色
        jiedian_txt = jiedian[jiedian_i].child("android.view.View").get_text()
        print(jiedian_txt)
        # 获取元素节点

                
        jiedian_i_nod = jiedian[jiedian_i].child("android.view.View")
        # 获取节点坐标
        print(jiedian_i_nod.get_position())
        print(jiedian_i_nod.get_size())
        size_0 = jiedian_i_nod.get_size()
        position_0 = jiedian_i_nod.get_position()
        # 获取节点尺寸除以2

        for i_0 in range(len(size_0)):
            size_0[i_0] = size_0[i_0] / 2
        print(size_0)
#         # 计算坐标
        list_jia = []
        list_jian = []

        for index_0, item_0 in enumerate(position_0):
            list_jia.append(item_0 + size_0[index_0])

        print(list_jia)


        for index_0, item_0 in enumerate(position_0):
            list_jian.append(item_0 - size_0[index_0])

        print(list_jian)

        count = 1
        
        
        # 获取屏幕的大小
        
        
        list_jian_0 = []
        list_jia_0 = []
        # 获取坐标后开始截图
        list_jian_0.append(list_jian[0]*screen_with)
        list_jian_0.append(list_jian[1]*screen_height)

        list_jia_0.append(list_jia[0]*screen_with)
        list_jia_0.append(list_jia[1]*screen_height)
        
        
        

        c_0 = tuple(list_jian_0 + list_jia_0)
        print(c_0)
        # 截取图片区域
        screen = G.DEVICE.snapshot()

        # # 局部截图
        screen = aircv.crop_image(screen,c_0)

        # 保存局部截图到指定文件夹中
        pil_image = cv2_2_pil(screen)
        picture_name="{}_{}".format("截图颜色判断", time.strftime('%Y%m%d%H%M%S'))
        pil_image.save("G:/9月份pyqt项目/Airtest/代码/截图/untitled.air/{}.png".format(picture_name), quality=99, optimize=True)

    return("成功")

    
if __name__ == '__main__':
    jiedian = poco("android.widget.FrameLayout").offspring("com.wuba.zhuanzhuan:id/fah").child("android.webkit.WebView").offspring("app").child("android.view.View").child("android.view.View").child("android.view.View")[5].child("android.view.View").child("android.view.View")[1].child("android.view.View")[0].offspring("android.widget.ListView").child("android.view.View")

    txt_zuo_biao_jie_tu(jiedian)
  • 思路值得参考,代码写的比较乱,大家可以作为参考,以后再遇到类似的问题,直接上代码。当然有不足之处,多多包涵,小伙伴就自己补充,争取项目在最短时间内,不烧脑细胞可以完活。

你可能感兴趣的:(自动化测试,python)