Appium Android 自动化测试 -- 元素定位

自动化测试元素定位是难点之一,编写脚本时会经常卡在元素定位这里,有时一个元素能捣鼓一天,到最后还是定位不到。

Appium 定位方式和 selenium 一脉相承,selenium 中的定位方式Appium 中都支持,而 Appium 还增加了自己特定的方式用来定位原生的 Android 与 iOS 元素。

1、Appium 元素的定位方式

Appium 支持以下元素定位方式

ID,本机元素标识符。 Android 的 resource-id; iOS 的 Name

NAME,1.4以上版本已经不支持该定位方式

CLASS_NAME,Android, UIAutomator2 类的全名; IOS, 以XCUIElementType 开头的XCUI 元素全名。

LINK_TEXT(没用),链接的完整文字

PARTIAL_LINK_TEXT(没用),链接的部分文字

TAG_NAME ,元素的结点名称

CSS_SELECTOR,css 定位,检索 page source 的 xml 文档的有效 css

XPATH(不推荐),xpath 定位,检索 page source 的 xml 文档的有效 xpath

ACCESSIBILITY_ID,通过附加给定元素的辅助功能ID或标签定位元素,如 Android 的 content-desc属性, iOS 的 accessibility-id 属性。

IMAGE (实验阶段,不推荐使用), 根据base64编码的图像文件定位元素

CUSTOM (实验阶段,不推荐使用), 使用第三方插件定位元素

ANDROID_UIAUTOMATOR, 使用 Android 的 UiAutomator Api 定位元素,特别是UiSelector类来定位元素。

ANDROID_VIEWTAG, 通过Android元素视图定位元素

IOS_UIAUTOMATION, 使用iOS 的 UIAutomation 库去定位元素,(iOS 9.3及以下版本)

IOS_PREDICATE, 使用 iOS Predicate 定位元素(需要 iOS 10.0及更高版本)

IOS_CLASS_CHAIN (不推荐), 仅支持iOS 的 XCTest 框架,不如 xpath

上面的定位方式一堆,很多种,其实大多数用不到,常用有 id,accessibility id,android uiautomator(ios uiautomation\ios predicate),xpath。

xpath iOS不推荐使用, 当前版本对 iOS 支持不友好,非常慢。

2、抓取元素

2.1 Android 抓取元素(uiautomatorviewer)

uiautomatorviewer 工具在SDK的安装目录下的tools文件夹下,

第一步,启动模拟器或连接手机开启调试模式

第二步,使用命令 uiautomatorviewer 打开 UI Automator Viewer,如图:

2.2 iOS 抓取元素

iOS 的UI自动化测试只能在Mac上运行,抓取元素使用Appium自带工具。

  1. Start Server 启动Appium

2. 点击搜索图标按钮 

 

3. 输入App启动的Desired Capabilities,点击Start session 启动

注意:模拟器可以直接此启动,真机需要链接上电脑后启动,并指定真机的udid

4. 通过选取元素工具,选择需要定位的元素,元素的属性信息出现在右边

顶部工具栏按钮功能说明:

选取元素:选择视图区域元素,获取元素信息

滑动屏幕:在视图区域点击两次,通过两次的坐标,在模拟器中滑动屏幕

点击:在视图区域点击,模拟器中也触发相应的点击

返回上一级:相当于 Back

更新页面视图:当模拟器中页面与视图不一致时,用来更新视图

查找元素:能通过id,name,XPath, class name等查找元素。用来确认元素定位。

Selected Element 的信息

常用来定位元素的是accessibility id和name,无法使用其他元素定位方式的情况下才采用xpath

注意:使用xpath时,工具自动生成的xpath稳定性和可靠性不高,进行手写,不要使用//td[5] 这类的节点。

2.3 Mac 抓取Android元素

Mac 抓取Android可以使用uiautomatorviewer工具和appium,uiautomatorviewer 也是在SDK安装目录的tools目录下。

appium 与定位 iOS 一样,在Desired Capabilities中设置启动信息为Android的就可以,差别在于,Android必需先启动模拟器,它无法自动启动。

 

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2021数学建模C题目– 生产企业原材料的订购与运输

C 题——生产企业原材料的订购与运输 思路:该题主要是通过对供应商的供货能力和运送商的运货能力进行估计,给出合适的材料订购方案 程序获取 第一题问题思路与结果: 对 402 家供应商的供货特征进行量化分析,建立反映保障企业生…

迈向百亿亿次人工智能数据基础设施

对我来说,在MinIO已经一个多星期了。沉浸在白板会议、架构审查和客户电话中的最大收获是,产品的简单性既是其显着特征,也是其最具决定性的价值驱动因素之一。在规模上尤其如此。由于人工智能的进步,计算能力的爆炸性增长对数据格局…

数据集标注研究

主要研究数据集标注存储文件的数据存储格式 目录 0.简介1.coco128-seg数据格式1.1 分割标注格式2.YOLO格式2.1 YOLO目标识别标签2.2 yolov5-seg分割标签2.TT100K数据集标注2.1 TT100K数据集标注文件解析0.简介 1.coco128-seg数据格式 1.1 分割标注格式 如coco128-seg数据集 …

Pikachu靶场--XSS

参考借鉴 Pikachu靶场之XSS漏洞详解_pikachu xss-CSDN博客 一个视频讲清楚XSS跨站脚本&#xff08;CTF教程&#xff0c;Web安全渗透测试入门&#xff09;_bilibili 反射型xss(get) 输入payload&#xff1a;<script>alert(123)</script> 解决一&#xff1a;在URL框内…

展讯-QMI8658和气压传感器驱动调试

1.调试QMI8658 参考demo&#xff0c;添加QMI8610相关内容 当前驱动路径位于&#xff1a;bsp/modules/input/misc/qmi8610/qmi8610.c 编译使用make sockoimage 用fastboot烧录 1.确定驱动被正常加载 代码添加之后&#xff0c;首先确定有没有进入当前驱动文件 dmesg |grep …

Python+Selenium自动化入门

本章内容需有一定Python基础&#xff0c;如何不懂的&#xff0c;请先学习Python。 什么&#xff1f;&#xff1f;没有好的学习资料&#xff0c;给你准备好了&#xff01;&#xff01; Web自动化环境搭建 1、软件准备 python64位安装包chrome64位浏览器&驱动浏览器驱动下…

聚道云软件连接器:打破壁垒,实现数电票与航信的无缝对接

一、客户介绍 某网络科技有限公司是一家专注于数字化解决方案的创新型企业。公司致力于为企业提供高效、便捷的科技服务&#xff0c;尤其在发票管理领域具有深厚的技术积累和丰富的实践经验。该公司凭借先进的软件连接技术和优质的服务&#xff0c;赢得了众多客户的信赖和好评…

TF-IDF在现代搜索引擎优化策略中的作用

TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff09;是一种用于文本挖掘和信息检索的统计方法&#xff0c;用来评估一个词语对于一个文档或一个语料库的重要程度。TF-IDF算法结合了词频&#xff08;TF&#xff09;和逆文档频率&#xff08;IDF&#xff0…

TOPGP-TIPTOP调用外部Webservice

功能要求&#xff1a;ERP作业调用外部系统的webserice更新数据。 演示环境&#xff1a;ERP作业cooi002&#xff08;员工档案&#xff09;录入后更新到外部系统员工档案表。 1、外部系统的WebSerice使用.net搭建 2、在Service.cs中写一个调用方法erp_other erp_other中两个参数…

32.基于分隔符解决黏包和半包

LineBasedFrameDecoder 基于换行/n (linux)或回车换行/r/n(windows)进行分割。 使用LIneBasedFrameDecoder构造方法,需要设定一个最大长度。 如果超过了最大长度,还是没有找到换行符,就这位这个数据段太长了,抛出ToolLongFrameException DelimiterBasedFrameDecoder …

个体核定征收双免个体户0税率大额核定税率全行业筹划

工商银行的会计政策和程序规定 工商银行会计政策和程序规定 工商银行的会计政策和程序规定 https://www.9733.cn/shop/ssch 一、个体工商户核定征收 核定征收是一种简化税收管理方式&#xff0c;适用于簿记不健全、难以准确核算收入和成本的个体。以下是主要特点&#xff1a…

使用Naive UI的级联选择器 Cascader进行省市区选择

序言&#xff1a; 在进行PC版的功能开发时&#xff0c;进行客户管理时老板要让客户便捷的选择自己的省市区等信息&#xff0c;而不是让他们一个个去填写&#xff0c;这时就需要使用级联选择器来进行省市区的选择。 注&#xff1a;element ui/plus的级联选择器也是可以的。 步骤…

美国众议院通过ENFORCE ACT草案:AI领域的潜在冷战?

近日&#xff0c;美国众议院通过了“增强关键出口海外限制国家框架法案”&#xff08;ENFORCE ACT&#xff09;&#xff0c;该法案旨在限制AI/ML技术和人才向中国的流动。这一举动引发了广泛讨论和担忧&#xff0c;许多人认为这将对在美从事AI相关工作的中国人造成重大影响。本…

基于STM32的智能病房监控和人脸识别系统设计(毕业设计)

摘 要 随着技术的不断进步和医疗需求的不断增长&#xff0c;智能病房控制系统有望在医疗领域发挥更大的作用。基于此&#xff0c;本文研究设计了一款低成本、操作简单、适用性强的基于STM32的智能病房监控和人脸识别系统。该系统通过STM32作为控制器和OpenMV对人脸分辨进行门…

微信小程序开发---自定义底部tabBar

自定义tabBar注意事项&#xff1a; 在自定义 tabBar 模式下 &#xff0c;为了保证低版本兼容以及区分哪些页面是 tab 页&#xff0c;app.json文件中 tabBar 的相关配置项需完整声明&#xff0c;但这些字段不会作用于自定义 tabBar 的渲染。所有 tabBar 的样式都由该自定义组件…

实现一个渐进优化的 Linux cp 命令

1&#xff0c;第1版 copy 先写个轮廓 selfcp.c &#xff1a; #include <stdio.h>int main() {FILE *source, *destination;char ch;source fopen("H222.txt", "r");if (source NULL) {printf("Error opening source file!\n");retur…

ISO14001认证:引领企业迈向绿色未来

在当今全球环境日益恶化的背景下&#xff0c;绿色发展已成为企业和社会共同追求的目标。ISO14001环境管理体系作为由国际标准化组织&#xff08;ISO&#xff09;制定的环境管理国际标准&#xff0c;为企业提供了系统和全面的环境管理框架&#xff0c;适用于各种类型和规模的组织…

ubuntu 20.04 访问csdn报错 Secure connection failed

打扰了&#xff0c;csdn服务器的问题&#xff0c;和源没关系&#xff0c;后面又重新测试了一下。刚好那一刻网站连上了。 暂时没有好办法&#xff0c;等待一段时间就连上了&#xff0c;改host似乎也不太行。 问题原因&#xff1a; 我一边更新源 sudo apt update & apt up…

计算机组成原理 —— 存储系统(主存储器基本组成)

计算机组成原理 —— 存储系统&#xff08;主存储器基本组成&#xff09; 0和1的硬件表示整合结构寻址按字寻址和按字节寻址按字寻址按字节寻址区别总结 字寻址到字节寻址转化 我们今天来看一下主存储器的基本组成&#xff1a; 0和1的硬件表示 我们知道一个主存储器是由存储体…

Webstorm vue项目@路径不能跳转到对应资源,提示Cannot find declaration to go to

Webstorm vue项目路径不能跳转到对应资源,提示Cannot find declaration to go to 我们 ctrl加鼠标左键点击方法会失效&#xff0c;看了网上很多教程在说需要在此处配置一下webpack.config.js的文件路径&#xff0c;而且指向了node_modules\vue\cli-service\webpack.config.js 我…