基于appium的常用元素定位方法

一、元素定位工具
  app应用的元素使用的是控件定位,不同于web网页,web网页定位元素通常使用的是F12工具,那么在app当中我们则要借助其它的工具来辅助定位。

1.uiautomatorviewer.bat
  uiautomatorviewer.bat工具在安装完ADT工具之后,位于ADT安装路径的android-sdk-windows\tools\bin目录下

 双击启动即可,启动之后,在初始界面上,点击如图位置按钮可以进行截屏

  截屏后即可查看各个元素,截屏后的效果:

 2.appium检查器

  在appium启动后的日志窗口界面,点击“启动检查器会话”,会跳转到检查器启动参数配置界面,参数配置直接将我们代码里面的启动参数搬过来就可以了。

 

 点击启动后,会根据我们配置的应用信息,自动跳转到应用的主页面,我们就可以开始进行元素定位了:

 二、常用元素定位方法

  appium从selenium中继承了所有的元素定位方法,并且增加了自己的一些方法,我们先看看appium的源码:

  但是从继承selenium中的定位方法中,一般只会用到id、class_name、xpath这三种方法,总结起来,appium中常用的定位方法一般有以下五种:

通过id定位:resource-id
通过class_name定位:class
通过accessibility_id定位:content-desc
通过android_uiautomator定位:SDK自带的java开发的uiautomator自动化框架
通过xpath定位
  UIAutomator介绍:     

  UIAutomator是安卓移动端的UI自动化框架,要求:Android4.3以上

提供了一系列API:执行UI测试在系统或者第三方app上面
允许在被测设备上执行操作,比如打开系统设置菜单
适合编写黑盒自动化测试
  UIAutomator框架的主要特点:

元素定位:UI Automator Viewer。扫描、分析待测应用的UI组件的图像工具
元素操作:Accessing device state。在目标设备和app上各种操作
元素识别:UI Automator APIs。在多个应用程序中捕获和操作UI组件
1.id定位
driver.find_element_by_id() 或者 MobileBy.ID

 注意这里是使用resource-id,而不是id

loc = (MobileBy.ID, 'com.taobao.taobao:id/iv_image')
2.class_name定位
driver.find_element_by_class_name() 或者 MobileBy.CLASS_NAME

 直接使用class即可

loc = (MobileBy.CLASS_NAME, 'android.widget.ImageView')
3.accessibility_id定位
driver.find_element_by_accessibility_id() 或者 MobileBy.ACCESSIBILITY_ID

 这里使用content-desc即可

loc = (MobileBy.ACCESSIBILITY_ID, '管理')
4.android_uiautomator定位
driver.find_element_by_android_uiautomator() 或者 MobileBy.ANDROID_UIAUTOMATOR

该方法的参数为UiSelector类定位元素的表达式:

new UiSelector().函数名称('定位表达式')

实例化一个UiSelector对象,然后通过实例接口调用,具体用到的一些方法参考官网的说明,网址:

这里调用UiSelector对象的text()方法即可,更多的方法请参考上述地址

# 注意字符串必须要用双引号
loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("去逛逛")')
5.xpath定位
driver.find_element_by_xpath() 或者 MobileBy.XPATH

 注意这里的标签名一定是使用class来作为xpath的标签名,在这里不同于selenium,并且遇到text文本定位的时候,使用的是text而不是text()

loc = (MobileBy.XPATH, '//android.widget.TextView[text="首页"]')
三、组合定位
使用的是UIAumtomator下的方法,因为UiSelector类下的方法都反回了对象本身,因此可以连续调用各种方法,这种使用方法即组合定位

 我们可以连续调用三个方法进行组合

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.TextView").text("家装").index(2)')
四、父子定位
调用UiSelector类的childSelector()方法,在该方法里面传入子代的元素定位表达式

比如刚刚“家装”的父节点属性如下

 那么我们的定位表达式可以通过父子定位来实现

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.LinearLayout").childSelector(text("家装"))')
五、兄弟定位
同理,我们调用fromParent()方法,表示定位同级的兄弟元素

 已知了“首页”按钮为本元素,text属性为“首页”,则通过该元素来定位“百货元素”

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("首页").fromParent(text("百货"))')
总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助

 

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

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

相关文章

【Docker】进阶之路:(十一)Docker存储

【Docker】进阶之路:(十一)Docker存储 Docker存储简介storage driverdata volumevolumebind mounttmpfs mount Docker提供了4种存储方式:默认存储、volume(数据卷)、bind mounts(绑定挂载)、tmpfsmount(仅在Linux环境中提供)。其中…

Jemeter,提取响应体中的数据:正则表达式、Json提取器

一、正则表达式 1、线程组--创建线程组; 2、线程组--添加--取样器--HTTP请求; 3、Http请求--添加--后置处理器--正则表达式提取器; 4、线程组--添加--监听器--查看结果树; 5、线程组--添加--取样器--调试取样器。 响应体数据…

docker mysql8 设置不区分大小写

docker安装Mysql8.0的坑之lower_case_table_names_docker mysql lower_case_table_names-CSDN博客https://blog.csdn.net/p793049488/article/details/108365929 docker run ‐di ‐‐nametensquare_mysql ‐p 33306:3306 ‐e MYSQL_ROOT_PASSWORD123456 mysql

金蝶EAS如何增加报表

金蝶EAS如何增加销售毛利报表? 文章目录 菜单路径:导入授权发布管理 菜单路径: 商业分析———扩展报表中心——报表工具 ——报表工具 汽车 4S——整车管理——整车销售——扩展报表 导入 选择报表文件进行导入 授权 发布管理

(纯原创)基于JavaWeb的宠物领养商城(详细源码以及开发设计报告)

摘要 本宠物领养系统以MVC分层为原则,数据持久化使用Mybatis,数据库使用MySQL,这些技术目前相对比较成熟,方便系统的维护与扩展 商城系统包括了宠物领养、用户注册、用户登录、商品查询、商品添加到购物车、删除商品等几大功能…

Linux基础项目开发2:物联网监控——视频监控方案介绍(一)

前言: 这次我们来做一个关于视频监控的基础小项目,需要我们用到网络的相关知识,还会学到好多优秀的网络协议,下面让我们开始对物联网视频监控进行一个大体框架的介绍吧 目录 项目内容: 1.视频监控方案介绍 2.视频监控…

手写VUE后台管理系统10 - 封装Axios实现异常统一处理

目录 前后端交互约定安装创建Axios实例拦截器封装请求方法业务异常处理 axios 是一个易用、简洁且高效的http库 axios 中文文档:http://www.axios-js.com/zh-cn/docs/ 前后端交互约定 在本项目中,前后端交互统一使用 application/json;charsetUTF-8 的请…

云计算 云原生

一、引言 云计算需要终端把信息上传到服务器,服务器处理后再返回给终端。在之前人手一台手机的情况下,云计算还是能handle得过来的。但是随着物联网的发展,什么东西都要联网,那数据可就多了去了,服务器处理不过来&…

MachMap:End-to-End Vectorized Solution for Compact HD-Map Construction

参考代码:None 动机与出发点 地平线的MapTR展现出了构建高精地图的能力,但是它的机制确实是有点复杂了。为了兼容不同车道线的朝向,环形车道线的起终点等情况,针对性设计了permute-equal的匹配逻辑,这样的逻辑真的是太…

软件测试之压力测试详解

一、什么是压力测试 软件测试中:压力测试(Stress Test),也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、…

appium安卓app自动化,遇到搜索框无搜索按钮元素时无法搜索的解决方案

如XX头条,搜索框后面有“搜索”按钮,这样实现搜索操作较为方便。 但有些app没有设置该搜索按钮,初学者就要花点时间去学习怎么实现该功能了,如下图。 这时候如果定位搜索框,再点击操作,再输入文本后&#x…

SpringBootWeb请求响应之前言及状态码的详细解析

SpringBootWeb请求响应 前言 在上一次的课程中,我们开发了springbootweb的入门程序。 基于SpringBoot的方式开发一个web应用,浏览器发起请求 /hello 后 ,给浏览器返回字符串 “Hello World ~”。 其实呢,是我们在浏览器发起请求…

【算法与数据结构】332、LeetCode重新安排行程

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题比较属于困难题目,难点在于完成机票、出发机场和到达机场之间的映射关系,再…

使用yum/dnf管理软件包

本章主要介绍使用 yum 对软件包进行管理。 yum 的介绍搭建yum源创建私有仓库yum客户端的配置yum的基本使用使用第三方yum源 使用rpm安装包时经常会遇到一个问题就是包依赖,如下所示。 [rootrhel03 ~]# rpm -ivh /mnt/AppStream/Packages/httpd-2.4.37-41.modulee…

【三维重建】对极几何

极几何描述了同一场景或者物体的两个视点图像间的几何关系 可以发现P在左右相机的投影点一定在各自的极线上,如果求出极线就能缩小求解对应点的范围。 本质矩阵对规范化摄像机拍摄的两个视点图像间的极几何关系进行代数描述 规范化相机指的是相机的内参…

人工智能_机器学习063_SVR支持向量机_回归拟合天猫双十一销量方程---人工智能工作笔记0103

之前我们用线性回归做过天猫双十一销量预测的数据,现在我们再来用SVR支持向量机来做一下 首先上面是给出了销量,对应2009年到2019年的,销售额 可以看到: X=np.arange(2009,2020)-2008 统一减去2008的话看起来数据比较简单了 y=np.array([0.5,9.36,52,191,350,571,912,1207,1…

使用perl的Tie::File 模块删除文件固定行

使用perl的Tie::File 模块删除文件固定行, 为了说明简单代码中处理的是固定第二行开始的3行长度。下面给出perl代码: #! /usr/bin/perl use v5.14; use Tie::File;if (ARGV 0) {say "请输入一个文件名 !!!";exit 1; }my $filePath $ARGV[0]; tie my ar…

java工程(ajax/axios/postman)向请求头中添加消息

1、问题概述 在项目中我们经常会遇到需要向请求头中添加消息的场景,然后后端通过request.getRequest()或者RequestHeader获取请求头中的消息。 下面提供几种前端向请求头添加消息的方式 2、创建一个springmvc工程用于测试 2.1、创建工程并引入相关包信息 sprin…

C++之STL算法(1)

STL容器算法主要由、、组成;   algorithm主要有遍历、比较、交换、查找、拷贝、修改等; 1.遍历容器for_each for_each()函数用于完成容器遍历,函数参数如下: for_each(_InIt _First, _InIt _Last, _Fn _Func) 形参&#xff1a…

深度学习 Day10——T10数据增强

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 文章目录 前言一、我的环境二、代码实现与执行结果1.引入库2.设置GPU(如果使用的是CPU可以忽略这步)3.导入数据4.查…