首页 > 其他分享 >技术分享 | app自动化测试(Android)--App 控件定位

技术分享 | app自动化测试(Android)--App 控件定位

时间:2022-08-17 11:34:04浏览次数:82  
标签:控件 resource 定位 -- app uiautomatorviewer driver id 页面

原文链接

客户端的页面通过 XML 来实现 UI 的布局,页面的 UI 布局作为一个树形结构,而树叶被定义为节点。这里的节点也就对应了要定位的元素,节点的上级节点,定义了元素的布局结构。在 XML 布局中可以使用 XPath 进行节点的定位。

App的布局结构

从上面这张图中可以看到最左侧是应用的页面的展示,中间部分展示了这个页面的树形结构的 XML 代码。

其中包含的内容为:

  • 节点 node

  • 节点属性:包括 clickable(是否可点击)、content-desc(内容)、resource-id(元素 id)、text(文本)、bounds(坐标)等。

通过 ID 定位

在 Android 系统元素的 ID 称为 resource-id,使用页面分析工具比如 Appium Inspector 能够获取元素的唯一标识是 ID 属性,可以使用 ID 进行元素定位,方便快捷。

示例代码如下:

  • Python 版本
driver.find_element(By.ID, "android:id/text1").click()

  • Java 版本
driver.findElement(By.id("android:id/text1")).click();

注意 resource-id 对应的属性(包名:id/id 值),在使用这个属性的时候要把它当作一个整体。

通过 Accessibility 定位

当分析工具能抓取到的 content-desc 的属性值是唯一时,可以采用 Accessibility 的定位方式,示例代码:

  • Python 版本
driver.find_element_by_accessibility_id("Accessibility")

  • Java 版本
driver.findElementByAccessibilityId("Accessibility");

通过 XPath 定位

与 Selenium 类似,可以使用 XPath 的定位方式完成页面的元素定位。XPath 分为绝对路径定位与相对路径定位两种形式,下面介绍的都是相对定位的形式。

XPath:resource-id 属性定位

元素可以通过 resource-id 定位。

格式:

//*[@resource-id='resource-id属性']

示例代码:

  • Python 版本
driver.find_element(By.XPATH, \
'//*[@resource-id="rl_login_phone"]')

  • Java 版本
driver.findElement(By.xpath(\
"//*[@resource-id=\"rl_login_phone\"]"));

XPath:text 属性定位

元素可以通过 text 文本属性定位。

格式:

//*[@text=’text文本属性’]

示例代码如下

  • Python 版本
driver.find_element(By.XPATH,'//*[@text="我的"]')

  • Java 版本
driver.findElement(By.xpath("//*[@text=\"我的\"]"));

XPath:class 属性定位

元素可以通过 class 定位。

格式:

//*[@class=’class 属性’]

示例代码:

  • Python 版本
driver.find_element(By.XPATH,\
'//*[@class="android.widget.EditText"]')

  • Java 版本
driver.findElement(By.xpath(\
"//*[@class=\"android.widget.EditText\"]"));

XPath:content-desc 属性定位

元素可以通过 content-desc 定位。

格式:

//*[@content-desc='content-desc 属性']

示例代码:

  • Python 版本
driver.find_element((By.XPATH,\
'//*[@content-desc="搜索"]')

  • Java 版本
driver.findElement(By.xpath(\
"//*[@content-desc=\"搜索\"]");

uiautomatorviewer介绍

使用 Android SDK(sdk/tools/uiautomatorviewer)路径下自带的 uiautomatorviewer 工具也可以抓取当前页面的元素。

提前配置 sdk/tools/ 路径到环境变量 $PATH 中,直接在命令行输入下面的命令:

uiautomatorviewer

可以打开下面这样一个页面,点击页面左上角第二个图标(Android 手机图标),就可以获取下面的 uiautomatorviewer 快照图:

uiautomatorviewer 抓取快照展示出来的元素属性是经过解析的,如果想要查看 XML DOM 的真实结构可以打印 pagesource ,得到的内容如下,红色框起来的部分为上图的定位的 XML DOM 中的一个节点:

通过图片分析,android.widget.TextView 是文本类型的节点,其中包含的属性信息都在上面的 uiautomatorviewer 快照图中有展示。如果只想定位 Android 系统的页面元素,可以直接使用 uiautomatorviewer,速度快并且不需要配置任何参数,直接点击获取页面的图标就可以将客户端页面抓取出来。

另外,uiautomatorviewer 只能抓取 android8 以下的版本,如果要抓取 android8 以上的版本的页面信息,可以使用 Appium Inspector 或 WEditor。

获取更多相关资料,请添加微信ceshiren001

标签:控件,resource,定位,--,app,uiautomatorviewer,driver,id,页面
From: https://www.cnblogs.com/chengzi-ceba/p/16594497.html

相关文章

  • nginx使用
    windows启动:(1)检查80端口应用netstat-ano|findstr0.0.0.0:80(2)杀死该进程taskkill/F/pid9016(3)cmd管理员模式进入nginx文件夹nginx.exe (4)停止nginx(快速/......
  • ilasm和ildasm
    这两天使用了一次ilasm.exe和ildasm.exe,原因是公司官网所在服务器出现漏洞,服务器被种植了木马程序,公司运维以为是网站出了问题,让我帮助分析原因,一番操作后,让我惊奇万分。公......
  • Java初学易错点(day1)
    1.重写方法时,方法名一致,参数不一致,为重写(专业点叫重载)。2.重写的方法,可以和之前的方法共同存在(部分语言不好理解的点,会erlang的应该能理解)。 3.就近原作和和this。......
  • 关于莫比乌斯反演点这里进阶(第二个链接可能会挂掉,luogu2257第一篇题解)四边形不等式优化https://contest.xinyoudui.com/220515/zh/tutorialshttps://contest.xinyoud......
  • node.js安装过程中遇到的坑
    node.js的安装noide.js的完全卸载node.js的安装一些报错的解决1.node.js的完全卸载第一步:打开系统自带的应用管理器卸载ndoe.js。第二步:删除和node.js相关......
  • mysql 之 my.ini 配置
    mysql之my.ini配置 1. max_allowed_packet 配置在mysqld节点下添加,配置MySQL允许的最大数据包大小,下面的500M你可以根据你的项目修改为你自己的值,只要比要导入......
  • 计算当前周的周一至周日的日期
    letweekList=[{id:1,name:'星期一',date:''},{id:2,name:'星期二',date:''},{id:3,name:'星期三',date:''},{id:4,name:'星期四......
  • selenium之Frame操作
    frame介绍  frame切换方法说明:在Selenium中封装了如何切换frame框架的方法方法:1).driver.switch_to.frame(frame_reference)-->切换到指定frame的方法frame_ref......
  • 《GB28244-2012》PDF下载
    《GB28244-2012自动锻压机安全技术要求》PDF下载《GB28244-2012》简介本标准规定了自动锻压机的安全技术要求;本标准适用于自动锻压机,包括各类冷镦机和冷成形机。......
  • Git之清除历史记录操作
    近期公司需要将之前代码仓库中的提交记录都清理,所以操作一下,记录一下步骤:安全考虑:有时候在提交代码时,不小心提交了敏感数据,如账号密码什么的,这样在历史记录中就可以......