【appium】App类型、页面元素|UiAutomator与appium|App元素定位

目录

一、App前端基础知识

1、App类型划分

2、App类型对比

3、App页面元素

App页面元素分为布局和控件两种

常见布局:

常见控件:定位软件:appium和sdk自带的uiautomatorviewer都可以定位

二、App元素定位

1、id定位

2、text定位

3、className定位

4、accessibility id定位

5、AndroidUIAutomator

6、xpath定位(App\web通用)

6.1 xpath绝对定位 从根开始找 / (根目录)

缺点

6.2 xpath 相对定位  只要不是/开始的,就是相对路径

路径解释:

优点

6.3 xpath轴定位(相对定位中的一种)

7、元素定位示例

方式一:AndroidUIAutomator

方式二:xpath

注意⚠️APP中不能用text()=, 不需要(), 和web定位会有一些不同

因为android的text是属性,web的text是方法


一、App前端基础知识

1、App类型划分

Native:原生——是在Android、IOS等移动平台上利用提供的开发语言、开发类库、开发工具进行App软件开发。

Web:纯web网页——指网页内的应用,类似于基于浏览器访问淘宝、微博等应用。是用HTML5应用开发,是利用Web技术进行的App开发。Web技术本身需要浏览器的支持才能进行展示和用户交互,因此主要用到的技术是HTML5、Javascript、CSS等。

Hybrid:混合——现在常见的,用的比较多——利用原生与H5的开发技术的混合应用,原生代码部分利用Web View插件或者其它框架为H5提供容器,程序主要的业务实现、界面展示都是利用与H5相关的Web技术进行实现的。

2、App类型对比

应用类型优点缺点
Native直接依托于操作系统、交互性最强、性能最好、功能最为强大开发成本高、无法跨平台 更新缓
web开发成本低、可以跨平台调试方便、更新无需通知用户、不需要手动升级 、无需安装App无法获取系统级别的通知、提醒、动效等等 、用户留存率低、体验较差
Hybrid开发成本较低,可以跨平台,调试方便维护成本低,功能可复用、性能和体验要比web app好,更新较为自由相比原生、性能仍然有较大损耗、不适用于交互性较强的app

如何判断是否是原生的?

开发者选项-显示布局边界:有方框圈圈的就是原生的;整个页面嵌套进来的,就是html

3、App页面元素

App页面元素分为布局和控件两种

常见布局:

  • FrameLayout(框架布局)

  • LinearLayout(线性布局)

  • AbsoluteLayout(绝对布局)

  • RelativeLayout(相对布局)

  • TableLayout(表格布局)

常见控件:

Button、ImageView、EditText、TextView、View...

定位软件:

appium和sdk自带的uiautomatorviewer都可以定位
appium:
  • 在Android端,appium基于WebDriver协议,利用Bootstrap.jar,最后通过调⽤UiAutomator的命令,实现App的自动化测试。

  • Appium其实是找了一个中间件Bootstrap,Bootstrap是一个Uiautomator的测试脚本,UiAutomator可以正常运行它,它也可以正常的使用UiAutomator的方法,这个就是Appium的命令可以转换成UiAutomator命令的关键

  • Appium是基于UIAutomator框架实现的一个开源、跨平台的测试框架。支持跨平台它允许测试人员在不同的平台iOS或Android使用同一套API来写自动化测试脚本,可以增加iOS和Android测试套件间代码的复用性。支持多语言如:java、python;

UiAutomator

在Android SDK 4.3中提供了如下工具来支持UI自动化测试:

  • uiautomatorviewer – 一个图形界面工具来扫描和分析应用的UI控件。存放在tools目录。

UiAutomator测试框架是AndroidSDK自带的App UI自动化测试Java库。

  • UiAutomator只能测试Android native app

  • UiAutomator——基于UIAutomation的用户界面自动化测试框架,可以跨应用工作;

二、App元素定位(以下示例以java为例)

1、id定位

id定位通过resource-id属性,由开发人员在项目中指定

注意:有可能出现一个页面会有多个相同的resource-id值

 

2、text定位

使用AndroidUIAutomator定位text属性元素

3、className定位

根据class属性查找元素,这种方式一般得到的会是多个元素--不推荐

4、accessibility id定位

在UIAutomatorViewer中并没有此属性,对应是content-desc属性                                       

5、AndroidUIAutomator

6、xpath定位(App\web通用)

xpath其实就是一个path(路径),一个描述页面元素位置信息的路径,相当于元素的坐标

xpath基于XML文档树状结构,是XML路径语言,用来查询xml文档中的节点

既可以用于XML(⚠️安卓的源代码就是xml)也可以用于HTML

6.1 xpath绝对定位 从根开始找 / (根目录)

缺点

一旦页面结构发生变化(比如重新设计时,路径少了两节),该路径也随之失效,必须重新写

6.2 xpath 相对定位  只要不是/开始的,就是相对路径

相对路径以//开头,表示让xpath引擎从文档的任意符合的元素节点开始进行解析

路径解释:
  • // 匹配指定节点,不考虑它们位置(/则表示绝对路径,从根下开始)

  • * 通配符,匹配任意元素节点(标签名)。

  • @选取属性

  • [] 属性判断条件表达式

优点

灵活,方便,耦合性低

6.3 xpath轴定位(相对定位中的一种)

当某个元素的各个属性及其组合都不足以定位时,那么可以利用其附近的元素等各种可以定位的元素进行定位。

轴名称 释义
parent选取当前节点的父节点
preceding-sibling选取当前节点之前的所有兄弟节点
following-sibling选取当前节点之后的所有兄弟节点

使用语法:

/轴名称::节点名称[@属性=值]

7、元素定位示例

一个属性text的定位

方式一:AndroidUIAutomator

driver.findElementByAndroidUIAutomator("new UiSelector().text(\"软件测试基础\")");
new UiSelector——是android 代码

方式二:xpath

driver.findElement(By.xpath("//*[@text='软件测试基础--中级--第1套']")).click();
或者
driver.findElement(By.xpath("//*[contains(@text,'软件测试基础--中级--第1套')]")).click()
​
​
以下方式均错误:1、不加* 不行
driver.findElement(By.xpath("//[@text='软件测试基础--中级--第1套']")).click();2、加括号不行
driver.findElement(By.xpath("//*[@text()='软件测试基础--中级--第1套']")).click();

注意⚠️APP中不能用text()=, 不需要(), 和web定位会有一些不同
因为android的text是属性,web的text是方法

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

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

相关文章

【Java EE初阶二十六】简单的表白墙(二)

2. 后端服务器部分 2.1 服务器分析 2.2 代码编写 2.2.2 前端发起一个ajax请求 2.2.3 服务器读取上述请求,并计算出响应 服务器需要使用 jackson 读取到前端这里的数据,并且进行解析: 代码运行图: 2.2.4 回到前端代码,处理服务器返回的响应…

from tensorflow.keras.layers import Dense,Flatten,Input报错无法引用

from tensorflow.keras.layers import Dense,Flatten,Input 打印一下路径: import tensorflow as tf import keras print(tf.__path__) print(keras.__path__) [E:\\开发工具\\pythonProject\\studyLL\\venv\\lib\\site-packages\\keras\\api\\_v2, E:\\开发工具\\…

Python 实现 ROC指标计算(变动率指标):股票技术分析的利器系列(15)

Python 实现 ROC指标计算(变动率指标):股票技术分析的利器系列(15) 介绍算法公式 代码rolling函数介绍核心代码计算OSC 完整代码 介绍 ROC(变动率指标)是一种技术分析指标,用于衡量价格变动的速…

windows系统使用Vscode在WSL调试golang本地进程

背景: windows10企业版 vscodegolang1.20 wsl编译运行。 vscode 使用本地wsl进行进程attach操作,发现:Access is denied. 本地进程启动,vscode调试进程。windows-Linux控制台: Starting: C:\Users\book\go\bin\dlv.exe dap --l…

Ubuntu Mysql Innodb cluster集群搭建+MaxScale负载均衡(读写分离)

Ubuntu系统版本 20.04.3 LTS (Focal Fossa) 、64位系统。 cat /etc/os-release查看Ubuntu系统是32位还是64位 uname -m如果显示“i686”,则表示安装了32位操作系统。如果显示“x86_64”,则表示安装了64位操作系统。 一、安装MySql 参考: https://blog.csdn.net/qq_3712…

什么是去中心化云计算?

去中心化云计算是一种新型的云计算方式,它与传统的中心化云计算不同,将数据和计算任务分布到多个节点上,而不是将数据集中存储在中心服务器上。这种云计算方式具有许多优势,包括提高数据安全性、降低运营成本、增强可扩展性和灵活…

MCU最小系统电路设计(以STM32F103C8T6为例)

目录 一、何为最小系统? 二、最小系统电路设计 1.电源 (1)各种名词解释 (2)为什么会有VDD_1 _2 _3区分? (3)Mirco USB (4)5v->3.3v滤波电路 &#…

Unity(第九部)物体类

拿到物体的某些数据 using System.Collections; using System.Collections.Generic; using UnityEngine;public class game : MonoBehaviour {// Start is called before the first frame updatevoid Start(){//拿到当前脚本所挂载的游戏物体//GameObject go this.gameObject;…

naive-ui-admin 表格去掉工具栏toolbar

使用naive-ui-admin的时候,有时候不需要显示工具栏,工具栏太占地方了。 1.在src/components/Table/src/props.ts 里面添加属性 showToolbar 默认显示,在不需要的地方传false。也可以默认不显示 ,这个根据需求来。 2.在src/compo…

历史新知网:寄快递寄个电脑显示器要多少钱?

以下文字信息由(新史知识网)编辑整理发布。 让我们赶紧来看看吧! 问题1:快递寄电脑显示器要多少钱? 此物有多重? 顺丰寄就可以了,但是必须是原包装的,不然不好寄。 问题2&#xff1…

vue项目从后端下载文件显示进度条或者loading

//API接口 export const exportDownload (params?: Object, peCallback?: Function) > {return new Promise((resolve, reject) > {axios({method: get,url: ,headers: {access_token: ${getToken()},},responseType: blob,params,onDownloadProgress: (pe) > {peC…

React Switch用法及手写Switch实现

问&#xff1a;如果注册的路由特别多&#xff0c;找到一个匹配项以后还会一直往下找&#xff0c;我们想让react找到一个匹配项以后不再继续了&#xff0c;怎么处理&#xff1f;答&#xff1a;<Switch>独特之处在于它只绘制子元素中第一个匹配的路由元素。 如果没有<Sw…

GCN,R-GCN,岭回归,SVR,随机森林,Adaboost

图卷积神经网络(graph convolutional network, GCN),它将卷积神经网络拓展到图结构形式 中&#xff0c;GCN因可以很好地融合图结构数据的结构特征和属性特征并且有较好的组合泛化能力而被广泛使用。 关系图卷积神经网络(relational-graph convolutional network, R-GCN)&#…

【无标题】积鼎CFD VirtualFlow:航空及汽车燃油晃动流体仿真计算及试验对比

图1 汽车储液罐内的液体晃动 燃油晃动&#xff0c;作为航空、航海及汽车工业中一个重要的物理现象&#xff0c;一直以来都受到广泛关注。在飞行器、船舶或汽车的运行过程中&#xff0c;由于外部扰动或内部燃料的消耗&#xff0c;油箱内的燃油会产生晃动。这种晃动不仅会影响燃…

【Git教程】(五)分支 —— 并行式开发,分支相关操作(创建、切换、删除)~

Git教程 分支 1️⃣ 并行式开发2️⃣ 修复旧版本中的 bug3️⃣ 分支4️⃣ 当前活跃分支5️⃣ 重置分支指针6️⃣ 删除分支7️⃣ 清理提交对象&#x1f33e; 总结 对于版本提交为什么不能依次进行&#xff0c;以便形成一条直线型的提交历史记录&#xff0c;我们认为有 以下两个…

2024热门UI设计工具推荐

最好的UI设计工具可以适应几乎每一个设计过程&#xff0c;并且有望满足您的创造性要求。但既然UI设计工具那么多&#xff0c;应该用什么工具呢&#xff1f; 在过去的几年里&#xff0c;Sketch和figma的结合一直是许多设计师的选择&#xff0c;但其他工具也提供了有竞争力的特点…

LeetCode 刷题 [C++] 第240题.搜索二维矩阵 II

题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 题目分析 通过分析矩阵的特点发现&#xff0c;其左下角和右上角可以看作一个“二叉搜索树的根节…

C++ 补充之常用遍历算法

C遍历算法和原理 C标准库提供了丰富的遍历算法&#xff0c;涵盖了各种不同的功能。以下是一些常见的C遍历算法以及它们的概念和原理的简要讲解&#xff1a; for_each&#xff1a;对容器中的每个元素应用指定的函数。 概念&#xff1a;对于给定的容器和一个可调用对象&#xff…

Docker 常用操作命令备忘

Docker 一旦设置好了环境&#xff0c;日常就只要使用简单命令就可以运行和停止。 于是&#xff0c;我每次用的时候&#xff0c;都想不起来一些关键性的命令到底怎么用&#xff0c;特此记录。 一、镜像管理 从公有仓库拉取镜像 &#xff08;对于使用苹果电脑 M1/M2/M3 芯片的 …

[源码分析]webrtc音频流从接收到播放的关键流程

如图所示&#xff0c;音频流从接收到播放的核心关键流程和执行线程。 neteq中对音频流的RTP数据包进行了处理和解码操作。同时数据出现了跨线程的投递。 后面有空补上核心对象之间的关系图。 后面将添加对neteq模块的细节分析。