背景:
在做UI自动化时无论是PC端还是移动端,其中一个核心步骤就是定位控件,只要控件可以获取到,剩下的步骤就很好操作 ,获取控件的方式有很多,基本的方法有文本,控件Id,父控件加子控件索引,xpath以及轴定位等等,今天再给大家分享一个通过图片进行定位的方法:
语言:python
库:opencv
我们以Android UI自动化为例:
import subprocess
import threading
import time
import numpy
from PIL.Image import Image
from cv2 import cv2
from skimage.metrics import structural_similarity
import imutils
class ElementsApiMobile:
def __init__(self, driver):
self.BASE_DIR = Path(__file__).resolve().parent
self.screen_shot_dir = os.path.join(self.BASE_DIR, 'save_screen_shot')
self.make_dir(self.screen_shot_dir)
self.my_driver = driver
self.mobile_snap_shot_save_path = "/sdcard/Pictures/Screenshots/"
def check_if_in_picture(self, my_small_picture, my_mobile_pic_path=None, my_picture_dir=None, expect_result=True):
'''
检查指定区域图片是否在当前设备界面中
:param my_small_picture: 指定区域的小图
:param my_mobile_pic_path: 图片截图保存到移动端的路径,可以不传会报错到一个默认路径,此路径在设备上不一定存在,会导致截图失败
:param my_picture_dir: 本地图片路径
:param expect_result: 默认存在,如果传False ,期待结果为不存在
:return:
'''
if expect_result:
if self.find_if_in_picture(my_small_picture, my_mobile_pic_path, my_picture_dir):
assert True
else:
print(f"远程路径:{my_mobile_pic_path} ,图片 {my_picture_dir}中没找到 {my_small_picture}")
assert False
else:
if