appium图像识别之images-plugin插件

在进行App自动化测试的过程中,由于页面的复杂性,需要根据页面的技术实现,通过上下文来切换不同的定位类型,给定位元素的稳定性带来了不小的挑战;图像识别技术则不依赖于页面本身是用什么技术实现的,只要能识别图片上的元素即可定位,从而成了未来探索的一个方向。appium提供了一些方法利用图像识别来定位元素。

images-plugin插件

此插件支持的 -image 定位器策略,可以通过appium指定想要定位的元素的图片文件,如果appium可以找到与你的图片匹配的屏幕区域,它会将有关该区域的信息包装为标准WebElement并将其发送回appium客户端。

首先,安装appium images plugin插件。

appium plugin install images

查看已安装的appium插件。

  1. appium plugin list --installed

  2. ✔ Listing installed plugins

  3. - images@2.1.8 [installed (npm)]

启动 appium server 时指定使用image插件。

appium server --address '127.0.0.1' -p 4723  --use-plugins=images

以App 为例:

图片

首先,将要定位的页面按钮,截图并保存为图片文件phone.png。

图片

然后,编写appium自动测试脚本。

  1. import os

  2. import base64

  3. from appium import webdriver

  4. from appium.options.android import UiAutomator2Options

  5. from appium.webdriver.common.appiumby import AppiumBy

  6. capabilities = {

  7. "automationName": "UiAutomator2",

  8. "platformName": "Android",

  9. "appPackage": "com.meizu.flyme.flymebbs",

  10. "appActivity": "com.meizu.myplus.ui.splash.SplashActivity",

  11. "noReset": True,

  12. }

  13. appium_server_url = "http://127.0.0.1:4723"

  14. options = UiAutomator2Options().load_capabilities(capabilities)

  15. driver = webdriver.Remote(command_executor=appium_server_url, options=options)

  16. driver.update_settings({"fixImageTemplatescale": True})

  17. driver.implicitly_wait(10)

  18. current_dir = os.path.dirname(os.path.abspath(__file__))

  19. image_path = os.path.join(current_dir, "phone.png")

  20. with open(image_path, 'rb') as png_file:

  21. b64_data = base64.b64encode(png_file.read()).decode('UTF-8')

  22. driver.find_element(AppiumBy.IMAGE, b64_data).click()

代码说明

update_settings()方法用于设置当前会话,fixImageTemplatescale为True,详见后面的表格说明。

image_path变量用于定义定位图片的路径,通过 open()方法打开文件,并使用read()方法读取文件内容,然后,使用base64.b64encode()对文件进行编码。最后,使用-image方式定位图片并进行click()操作。

基于图像定位支持的操作

通过图片定位到的元素,仅支持以下操作。

•click
•isDisplayed
•getSize
•getLocation
•getLocationInView
•getElementRect
•getAttribute
•ovisual
•oscore

这些操作支持在“图像元素”上,因为它们是涉及屏幕位置的操作。其他操作(比如sendKeys)无法支持,因为根据提供的定位图像,appium只知道是否有一个屏幕区域与其视觉匹配,appium无法将这些信息转化为特定驱动程序的UI元素对象,因此无法图像坐标元素的输入。

以上支持的操作在python-client中的API如下:

  1. ...

  2. driver.update_settings({"getMatchedImageResult": True})

  3. ...

  4. el = driver.find_element(AppiumBy.IMAGE, b64_data)

  5. # 是否显示

  6. is_disp = el.is_displayed()

  7. print("是否显示:", is_disp)

  8. print("元素的尺寸:", el.size)

  9. print("元素在可渲染画布中的位置:", el.location)

  10. print("获取元素相对于视图的位置:", el.location_in_view)

  11. print("起始坐标-结束坐标:", el.rect)

  12. # 返回匹配的图像作为base64数据, 需要设置 getMatchedImageResult为true

  13. visual = el.get_attribute("visual")

  14. print("visual:", visual)

  15. # 自Appium 1.18.0起,返回相似度分数为浮点数,范围在[0.0, 1.0]之间。

  16. score = el.get_attribute("score")

  17. print("score:", score)

  18. # 点击

  19. el.click()

参数设置

由于通过图像查找元素依赖于图像分析软件与appium的截图功能,以及你提供的图片,appium提供了一些设置,帮助你调节此功能,在某些情况下可能加快匹配速度或使其更准确。

图片

具体使用参考前面的方法:

  1. driver.update_settings({"getMatchedImageResult": True})

  2. driver.update_settings({"fixImageTemplatescale": True}

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值