本站消息

  出租广告位,需要合作请联系站长

  今日名言-想象你自己对困难作出的反应,不是逃避或绕开它们,而是面对它们,同它们打交道,以一种进取的和明智的方式同它们奋斗 。——马克斯威尔·马尔兹

  今日名言-用谅解、宽恕的目光和心理看人、待人。人就会觉得葱笼的世界里,春意盎然,到处充满温暖。——蔡文甫


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

python +opencv 进行移动端UI自动化

发布于2021-07-25 07:43     阅读(1311)     评论(0)     点赞(17)     收藏(4)


python +opencv 进行移动端UI自动化

前言:
做过移动端ui自动化的小伙伴,就会发现很多控件的元素是一样的或者是找不到的,为了解决这个痛点,于是通过图片灰度处理返回坐标x,y找到控件的位置。再结合pytest+接口+UI断言整体项目思路。
1.接下来我们主要说一下基于opencv图片识别寻找控件坐标,pytest和接口不会的同学请看我的接口和pytest文章
2. 我们使用两个图,一个是移动端截图,一个是控件的图,如下:移动端截图
控件图

  1. 接下来我们直接上代码
import cv2
import os
import time

#获取移动端图片
def screencap():
    cmd = "adb root"
    cmd1 = "adb shell /system/bin/screencap -p /sdcard/da.png"
    cmd2 = "adb pull /sdcard/da.png "
    os.system(cmd)
    time.sleep(1)
    os.system(cmd1)
    time.sleep(2)
    os.system(cmd2)


def _tran_canny(image):
    """消除噪声"""
    image = cv2.GaussianBlur(image, (3, 3), 0)
    return cv2.Canny(image, 50, 150)


def detect_displacement(img_slider_path, image_background_path):
    """detect displacement"""
    # # 参数0是灰度模式
    image = cv2.imread(img_slider_path, 0)
    template = cv2.imread(image_background_path, 0)

    # 寻找最佳匹配
    res = cv2.matchTemplate(_tran_canny(image), _tran_canny(template), cv2.TM_CCOEFF_NORMED)
    # 最小值,最大值,并得到最小值, 最大值的索引
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

    top_left = max_loc[0]  # 横坐标
    # 展示圈出来的区域
    x, y = max_loc  # 获取x,y位置坐标、
    print(max_loc)
    return max_loc

    # w, h = image.shape[::-1]  # 宽高
    # cv2.rectangle(template, (x, y), (x + w, y + h), (7, 249, 151), 2)
    # return top_left


if __name__ == '__main__':
    screencap()
    image_location = detect_displacement('xiao.png', 'da.png')
    # 获取点击位置
    cmd = "adb shell input tap {x} {y}".format(x=image_location[0], y=image_location[1])
    # 模拟用户点击
    os.system(cmd)

4.本文使用的是ADB,也可结合uiautomator2,https://blog.csdn.net/huage926/article/details/118752071?spm=1001.2014.3001.5501。



所属网站分类: 技术文章 > 博客

作者:你做的菜有点咸

链接:http://www.pythonpdf.com/blog/article/483/ba4597334e25a0def852/

来源:编程知识网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

17 0
收藏该文
已收藏

评论内容:(最多支持255个字符)