Appium2 总结(三)图像识别定位

1.Appium 图像识别插件 images 安装

1
2
3
4
➜  ~ appium plugin install images
✔ Checking if '@appium/images-plugin' is compatible
✔ Installing 'images' using NPM install spec '@appium/images-plugin'
ℹ Plugin images@3.0.17 successfully installed

2.Appium 带着 images 插件启动

1
2
3
➜  ~ appium --use-plugins=images
[Appium] Attempting to load plugin images...
[Appium] .........

3. 裁剪图片

(1)使用模拟器或者手机截图

Screenshot_20240801-184130

(2)不改变尺寸大小和文件格式的情况下裁剪所要定位的图片

p1

4.python🌰

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
import base64

capabilities = dict(
platformName='Android',
automationName='uiautomator2',
deviceName='xx', # 这块在 android 平台上不作要求,填写 xx 都可以,在 ios 上必填
)

appium_server_url = 'http://localhost:4723' # appium 服务地址


# 驱动
driver = webdriver.Remote(appium_server_url, options=UiAutomator2Options().load_capabilities(capabilities))

# 打开图片文件
with open('images/p1.png', 'rb') as image_file:
# 读取图片数据
image_data = image_file.read()
# 将图片数据使用 base64 编码
encoded_image = base64.b64encode(image_data)
# 将编码后的图片数据转换为字符串
encoded_image_str = encoded_image.decode('utf-8')

# 这个原理是将所定位的图片转换为字符串,将目标页面也转换为字符串,然后在目标页面中对比相似度,相似度高的部分就定位成功
driver.find_element(AppiumBy.IMAGE, encoded_image_str).click()

5. 相关参考

https://www.bilibili.com/video/BV1qt421M7kZ/?spm_id_from=333.999.0.0&vd_source=fd555860cd7cf9b09d9279e5deaabb9d