appium图像识别之images-plugin插件

news2025/2/5 2:53:28

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

images-plugin插件

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

首先,安装appium images plugin插件。

appium plugin install images
  • 1

查看已安装的appium插件。

appium plugin list --installed

✔ Listing installed plugins
- 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自动测试脚本。

import os
import base64
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy


capabilities = {
    "automationName": "UiAutomator2",
    "platformName": "Android",
    "appPackage": "com.meizu.flyme.flymebbs",
    "appActivity": "com.meizu.myplus.ui.splash.SplashActivity",
    "noReset": True,
}

appium_server_url = "http://127.0.0.1:4723"
options = UiAutomator2Options().load_capabilities(capabilities)
driver = webdriver.Remote(command_executor=appium_server_url, options=options)

driver.update_settings({"fixImageTemplatescale": True})
driver.implicitly_wait(10)

current_dir = os.path.dirname(os.path.abspath(__file__))
image_path = os.path.join(current_dir, "phone.png")

with open(image_path, 'rb') as png_file:
    b64_data = base64.b64encode(png_file.read()).decode('UTF-8')

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如下:

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

el = driver.find_element(AppiumBy.IMAGE, b64_data)
# 是否显示
is_disp = el.is_displayed()
print("是否显示:", is_disp)

print("元素的尺寸:", el.size)
print("元素在可渲染画布中的位置:", el.location)
print("获取元素相对于视图的位置:", el.location_in_view)
print("起始坐标-结束坐标:", el.rect)

# 返回匹配的图像作为base64数据, 需要设置 getMatchedImageResult为true
visual = el.get_attribute("visual")
print("visual:", visual)

# 自Appium 1.18.0起,返回相似度分数为浮点数,范围在[0.0, 1.0]之间。
score = el.get_attribute("score")
print("score:", score)

# 点击
el.click()

参数设置

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

图片

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

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

 

总结:

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

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

软件测试面试文档

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

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1599044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dubbo面试回答简单版

一、dubbo特性 超时重试机制地址缓存多版本负载均衡:随机、权重轮询、最少活跃调用、一致性哈希集群容错:失败重试、快速失败、失败安全、失败自动恢复、并行调用、广播服务降级:异常时返回mock 集群容错 FailOver 失败重试,读…

k8s基础入门

前言 开始学习K8S了,下面就是笔记整理 简介 k8s是谷歌开源得容器管理系统,主要功能包括 基于容器得应用部署,维护和滚动升级负载均衡和服务发现跨机器和跨地区得集群调度自动伸缩无状态服务和有状态服务广泛得Volume支持插件保持扩展性 …

【MySQL | 第六篇】数据库三大范式

文章目录 6.数据库设计三大范式6.1第一范式6.2第二范式6.3第三范式6.4反范式设计 6.数据库设计三大范式 6.1第一范式 第一范式(1NF):确保每列的原子性(强调的是列的原子性,即列不能够再分成其他几列)。实际上,第一范式…

探索C++:深入了解这门古老而强大的编程语言

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

隐私计算实训营第九讲-隐语多方安全计算在安全核对的行业实践

隐私计算实训营第九讲-隐语多方安全计算在安全核对的行业实践 文章目录 隐私计算实训营第九讲-隐语多方安全计算在安全核对的行业实践1.业务背景:安全核对产生的土壤1.1相关政策出台1.2 数据差异的来源 2.产品方案:从试点到规模化的路3.技术共建&#xf…

RAKsmart:硅谷裸机云多IP服务器性能评测

在云计算领域,裸机云作为一种结合了传统物理服务器与云计算优势的服务模式,近年来备受关注。硅谷裸机云作为业界佼佼者,以其出色的性能和稳定性赢得了众多用户的青睐。今天,我们就来评测一下硅谷裸机云的多IP服务器性能。 首先&am…

操作系统再理解

目录 1、概念 2、操作系统的结构 3、对操作系统的理解(管理角度) 4、OS对硬件是怎么管理的? 1、概念 操作系统是一款进行软硬件资源管理的软件 广义的认识:操作系统的内核操作系统的外壳周边程序(用户提供使用操作…

mysql的下载、安装

首先进入官网:MySQL 点击“downloads”进入下载界面 2.往下滑动滚轮,点击“mysql community...(公开版)” 3.往下滑,找到并单击“install for Windows” 4.选择版本:初学者可以使用较低版本,较…

Java:定时任务无法正常执行(scheduling + ShedLock)

目录 一、场景二、代码片段三、排查四、原因五、解决 一、场景 1、使用定时任务(scheduling) 分布式锁(ShedLock)定期执行一段代码 2、configureTasks()对于任务执行周期的更新是正常的 3、但任务方法无法被执行 二、代码片段 三、排查 1、确认Trigger没有问题 2、查看red…

Mac用户必备神器:Default Folder X,让文件操作更快捷、更智能!

Default Folder X for Mac是一款功能强大的文件管理辅助工具,它为Mac用户带来了前所未有的文件操作体验。🌟 无论是日常办公、学习还是娱乐,Default Folder X都能帮助你更高效地管理文件,让你的工作更加得心应手。💼 …

java-spring 图灵 02 手写spring

01.idea中创建一个maven管理的空项目 02.模拟创建出spring容器类,这里叫wzpApplicationContext,创建的时候会自动加载配置类的数据: 这里wzpApplicationContext对标的是AnnotationConfigApplicationContext public class wzpApplicationCo…

【算法刷题 | 回溯思想 04】4.15(分割回文串)

文章目录 7.分割回文串7.1题目7.2解法:回溯7.2.1回溯思路(1)函数返回值以及参数(2)终止条件(3)遍历过程 7.2.2代码 7.分割回文串 7.1题目 给你一个字符串 s,请你将 s 分割成一些子…

鸿蒙原生应用再新丁!企查查 碧蓝航线 入局鸿蒙

鸿蒙原生应用再新丁!企查查 碧蓝航线 入局鸿蒙 来自 HarmonyOS 微博13日消息,碧蓝航线 将启动鸿蒙原生应用开发,双方将基于HarmonyOS NEXT鸿蒙星河版的原生流畅等特性,进一步提升游戏流畅度和画面精美度,为用户提供更…

汽车零部件制造迎来智能化升级,3D视觉定位系统助力无人化生产线建设

随着新能源汽车市场的蓬勃发展,汽车零部件制造行业正面临着前所未有的机遇与挑战。为了提高产能和产品加工精度,某专业铝合金汽车零部件制造商决定引进智能生产线,其中,对成垛摆放的变速箱壳体进行机床上料成为关键一环。 传统的上…

iframe嵌入海康威视摄像头监控视频画面

前言:海康威视有非常好的开放平台支持(海康开放平台),如遇到技术问题,可以先花点时间在开放平台视频教程板块学习一下。直接问客服可能会比较懵,而且sdk客服和api客服互相分离,一开始可能都不知道问谁。 在开放平台上…

《二》Qt Creator工具介绍与使用

一、关于界面 点击文件--->新建文件或项目会出现如下图: 我们选择第一个 点击下一步下一步: 继续下一步直到结束: 二,具体文件介绍 我们点击pro查看以下 QT core gui第1行 表示使用qt的core和gui库,如果以后…

【JAVA基础篇教学】第十四篇:Java中设计模式

博主打算从0-1讲解下java基础教学,今天教学第十四篇:Java中设计模式。 设计模式是解决软件设计中常见问题的可重复利用的解决方案。在 Java 中,常见的设计模式包括单例模式、工厂模式、观察者模式等。目前在基础教学篇中只展示常见的几种模…

背会这套面试八股文!还怕拿不到offer吗?

给各位小伙伴总结了软件测试的高频面试题,其中包含了多个方面的知识点,包括: 测试基础(102页) Linux基础(38页) MySQL (63页) ️ web测试(28页) APP测试(38页) selenium相关(50页) 性能测试(55页) 数据结构跟算法(51页) 大厂逻辑题(…

图深度学习(一):介绍与概念

目录 一、介绍 二、图的数据结构 三、图深度学习的基本模型 四、图深度学习的基本操作和概念 五、训练过程 六、主要应用场景 七、总结 一、介绍 图深度学习是将深度学习应用于图形数据结构的领域,它结合了图论的概念和深度学习的技术,用以处理和…

二叉树的创建和遍历(java)

简介 二叉树是一种常见的树形数据结构,它由节点组成,每个节点最多有两个子节点,分别称为左子节点和右子节点。这些节点以层次结构的方式组织在一起,每个节点都有一个父节点,除了根节点外,每个节点都有一个…