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

2024-02-28 10:28

本文主要是介绍【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是方法

这篇关于【appium】App类型、页面元素|UiAutomator与appium|App元素定位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/755226

相关文章

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

CSS Anchor Positioning重新定义锚点定位的时代来临(最新推荐)

《CSSAnchorPositioning重新定义锚点定位的时代来临(最新推荐)》CSSAnchorPositioning是一项仍在草案中的新特性,由Chrome125开始提供原生支持需... 目录 css Anchor Positioning:重新定义「锚定定位」的时代来了! 什么是 Anchor Pos

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模

C#实现查找并删除PDF中的空白页面

《C#实现查找并删除PDF中的空白页面》PDF文件中的空白页并不少见,因为它们有可能是作者有意留下的,也有可能是在处理文档时不小心添加的,下面我们来看看如何使用Spire.PDFfor.NET通过C#... 目录安装 Spire.PDF for .NETC# 查找并删除 PDF 文档中的空白页C# 添加与删

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数