因为要测试的 iOS app 用 appium 定位不了元素,所以就用网易的 aircv 开源库,通过图像识别找到需要查找的图片的坐标,然后通过 tap 的方法来点击该坐标。
def get_coordinate_by_image_identify(self, imgsch):
"""
通过图像识别来查找待查找图片的坐标
:param imgsch: 待查找图片
:return: x, y轴坐标
"""
try:
time.sleep(0.5)
self.driver.save_screenshot(CONST.Template_Img)
imsrc = ac.imread(CONST.Template_Img) # 原始图像
imsch = ac.imread(CONST.Image_Dir.format(self.param['deviceName'], imgsch)) # 待查找的部分
position = ac.find_template(imsrc, imsch)
if position is not None:
x, y = position['result']
else:
raise Exception("Cannot find the image that you provided.")
return x, y
except Exception as msg:
raise Exception(msg)
用self.driver.tap([(x, y)])
方法死活点击不了,一度以为是 iOS 上不支持 tap 的方法。
后面尝试用 mobile:tap 的方法self.driver.execute_script("mobile:tap", {'x': x, 'y': y, 'duration': 500})
,依然是点击不了
后面通过搜索发现了,原来是因为 iPhone 所有图形的坐标都是以点为单位的,点与屏幕上的实际像素不对应导致的。
6+, 6s+, 7+, 8+
6, 6s, 7, 8
自己也可以通过这个网站:https://www.gsmarena.com/,查看手机设备的分辨率
参考链接: