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

news2024/11/26 10:33:46

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

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必需先启动模拟器,它无法自动启动。

 

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

 全套资料获取方式:点击下方小卡片自行领取即可

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

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

相关文章

每天一道leetcode:剑指 Offer 32 - III. 从上到下打印二叉树 III(中等广度优先遍历)

今日份题目: 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。 示例 给定二叉树: [3,9,20,null,null,15,7…

pytorch Stream 多流处理

CUD Stream https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#c-language-extensions 中指出在kenel的调用函数中最后一个可选参数表示该核函数处在哪个流之中。 - 参数Dg用于定义整个grid的维度和尺寸,即一个grid有多少个block。为dim3类型。…

电脑开不了机如何解锁BitLocker硬盘锁

事情从这里说起,不想看直接跳过 早上闲着无聊,闲着没事干,将win11的用户名称改成了含有中文字符的用户名,然后恐怖的事情发生了,蓝屏了… 然后就是蓝屏收集错误信息,重启,蓝屏收集错误信息&…

【软件工程】2.4 建立动态模型

目录 2.4 建立动态模型 2.4.1 活动图 验证密码活动图 转账活动图 存款活动图 取款活动图 2.4.2 顺序图 2.4.3 状态图 ATM类状态图 总行状态图 分行状态图 2.4.4 协作图 总博客: 2.4 建立动态模型 开发交互式系统,动态模型非常重要 步骤&#…

电商运营必备!6步教你做好电商复盘

一、业绩及关键指标 1、总体完成情况:GMV、UV、转化率、客单价、件单价、连带率、UV价值等,达成率如何,数据同比、环比增幅,与大盘对比情况如何。 2、分阶段及日销情况:预热、预售、开门红、日销、大cu高潮期等销售达…

QFileDialog 对话框类

QFileDialog 对话框类 QFileDialog 对话框类是 QDialog 类的子类, 通过这个类可以选择要打开/保存的文件或者目录。关于这个类我们只需要掌握一些静态方法的使用就可以了。 /* 通用参数:- parent: 当前对话框窗口的父对象也就是父窗口- caption: 当前对话框窗口的标题- dir: 当…

Unity游戏源码分享-仿帝国时代游戏Demo-uRTS Toolkit

Unity游戏源码分享-仿帝国时代游戏Demo-uRTS Toolkit 游戏的架构值得参考 项目地址:https://download.csdn.net/download/Highning0007/88189905

医院临床病例管理系统,促进医疗数据的管理

医疗行业的不断发展,临床病例管理系统也逐渐成为医院管理重要的一环,医院临床病例管理系统是一款集医学信息管理、科研分析以及教学为一体的平台,为医生提供更加高效、准确的病例管理方式,提高诊疗质量,为医学科研提供…

‘vue’不是内部或外部命令,也不是可运行的程序或批处理文件的原因及解决方法

今天我在用node.js的时候,结果出现如下错误: C:\Users\xiesj> vue -v vue不是内部或外部命令,也不是可运行的程序或批处理文件。 原因: 1、确定npm是否已正确安装? 2、确定vue以及vue-cli已正确安装?…

亚马逊将与FTC官员会面!为避免反垄断诉讼做最后努力!

据外媒报道,据一位熟知内情的消息人士透露,亚马逊将于下周与美国联邦贸易委员会(FTC)会面,为避免反垄断诉讼做最后努力。这一举动被视作双方在对簿公堂或者达成和解之前最后的仪式性会议。 FTC在前总统唐纳德特朗普执…

智能文件改名,轻松复制文件并删除目标文件夹中的冗余文件

亲爱的用户们,我们常遇到这样的问题——在文件复制到指定文件夹时,目标文件夹中的冗余文件不断堆积,导致文件混乱、占用存储空间的情况?现在,我们为您带来了一种智能解决方案,让文件管理更简单 第一步&…

Cat.1 bis市场竞争加剧,美格智能脱颖而出有高招

全球物联网产业正值爆发期,2G/3G退网已成趋势,4G/5G协同发展持续进行中。在未来5~10年里,蜂窝物联网将由NB-IoT、LTE-Cat.1 bis、LTE-Cat.4 和RedCap、5G等技术来满足低速、中速、高速的物联网应用场景的需求。 Cat.1 bis承接了中速率物联网…

jmeter 二次开发详解

目录 背景: 自定义 BeanShell 功能 自定义请求编写(Java Sampler) 实现 Java Sampler 功能的两种方式 案例:使用 JavaSampler 重写 HTTP 的 POST 请求 自定义函数助手 背景: JMeter 是一个功能强大的性能测试工具…

idea打开多个项目需要开多个窗口(恢复询问弹窗)

【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】【创作不易,点个赞就是对我最大的支持】 前言 仅作为学习笔记,供大家参考 总结的不错的话,记得点赞收藏关注哦! 使用…

时序预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测

时序预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测 目录 时序预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测。基于贝叶斯(bayes)…

第一章-JavaScript基础进阶part4:PC端常见特效实现原理

文章目录 一、元素偏移量offset1.1 offset常用属性1.2 offset与style的区别1.3 案例 二、元素可视区client2.1 常用client属性2.2 client应用-flexible.js核心原理 三、元素滚动scroll3.1 scroll系列常用属性3.2 mouseover和mouseenter的区别 四、动画函数封装4.1 动画实现原理…

JNI之Java实现远程打印

打印机是最常见的办公设备了。一般情况下如果需要实现打印&#xff0c;可通过前端print.js包来完成。但是&#xff0c;如果要实现智能办公打印&#xff0c;就可以使用JNI技术、封装接口、远程调用实现完成。 导包 jacob&#xff1a;Java COM Bridge <dependency><g…

python实现简单的爬虫功能

前言 Python是一种广泛应用于爬虫的高级编程语言&#xff0c;它提供了许多强大的库和框架&#xff0c;可以轻松地创建自己的爬虫程序。在本文中&#xff0c;我们将介绍如何使用Python实现简单的爬虫功能&#xff0c;并提供相关的代码实例。 如何实现简单的爬虫 1. 导入必要的…

7 个最佳Node.js日志记录库和聚合器

日志记录是软件测试的重要组成部分。当我们知道错误是什么以及代码中出现问题的确切行时&#xff0c;调试应用程序要容易得多。 在本文中&#xff0c;我们将探讨与 Node.js 中的日志记录相关的各种概念&#xff0c;包括七个流行的日志记录库和聚合器&#xff0c;您可以使用它们…

【Linux进阶之路】进程(上)

文章目录 前言一、操作系统加载过程二、进程1.基本概念2.基本信息①运行并观察进程②创建子进程③僵尸与孤儿进程&#xff08;父子进程衍生出来的问题&#xff09;1. 僵尸进程&#xff08;Zombie状态&#xff09;2. 孤儿进程 3.基本状态①操作系统的状态&#xff08;统一&#…