【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 回到前端代码,处理服务器返回的响应…

springboot/ssm宠物领养救助平台Java流浪动物救助管理系统web

springboot/ssm宠物领养救助平台Java流浪动物救助管理系统web 基于springboot(可改ssm)vue项目 开发语言:Java 框架:springboot/可改ssm vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:…

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:\\开发工具\\…

经典逻辑题--鞋子的颜色

关注我,持续分享逻辑思维&管理思维; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;欢迎加入AI架构师论坛 有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心…

02点亮一个LED

书接上回 上回讲到创建一个示例工程 今天讲如何实现LED的点亮 点亮一个led 所需代码 参考来源网络 延时函数参考: Delay.c #include "stm32f10x.h"/*** brief 微秒级延时* param xus 延时时长,范围:0~233015* retval 无*/ vo…

Python 实现Excel自动化办公(下)

上一讲我们讲到了Python 针对Excel 里面的特殊数据处理以及各种数据统计,本讲我们将引入Pandas 这个第三方库来实现数据的统计,只要一个方法就可以统计到上一讲的数据统计内容,本讲也会扩展讲讲Pandas所涉及到的相关使用方法。 统计输出 imp…

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…

什么是去中心化云计算?

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

.NET Core Web API 之SignalR

SignalR是一个面向ASP.NET开发人员的库,它简化了将实时Web功能添加到应用程序中的过程。实时Web功能指的是服务器代码能够即时地将内容推送到连接的客户端,而不需要客户端每次都发送请求来获取新数据。 SignalR是一个集成的客户端与服务器库&#xff0c…

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…

全量知识系统问题及SmartChat给出的答复 之1

Q1. 一套完整的全量知识系统应该有哪些组成部分&#xff1f; 一套完整的全量知识系统应该包括以下组成部分&#xff1a; 数据采集&#xff1a;收集、整理、清洗和存储各种数据&#xff0c;包括结构化数据、半结构化数据和非结构化数据等。 数据存储和管理&#xff1a;建立可靠…

使用css reset 还是使用Normalize.css

文章目录 使用css reset 还是使用Normalize.cssCSS Reset:Normalize.css:总结Normalize.css 的使用&#xff08;例如Vue 3.0 和 Vue CLI 4.x 项目&#xff09;1.安装2.main.js 中导入3.测试引用是否成功。 使用css reset 还是使用Normalize.css 使用 CSS Reset 还是 Normalize…

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

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