Appium自动化(10) - appium高级元素定位方式之 UI Automator API 的详解
如果你还想从头学起Appium,可以看看这个系列的文章哦!
https://www.cnblogs.com/poloyy/category/1693896.html
前言
前面介绍过根据id,classname, accessibilityid,xpath来定位元素,其他这些方法底层都是利用了 UI Automator 的 API 功能实现的
UI Automator 介绍
- UI Automator 测试框架提供了一组 API 来构建 UI 测试,用于在用户应用和系统应用中执行交互
- 利用 UI Automator API,可以打开“设置”菜单或应用启动器等操作
- UI Automator 测试框架非常适合编写黑盒自动化测试,其中的测试代码不依赖于目标应用的内部
UI Automator 提供的功能
- 自带的元素定位工具
- 在设备上检索状态信息并执行操作的API
- 支持跨应用 UI 测试的API
UI Automator 访问设备状态
UI Automator 测试框架提供了一个 UiDevice 类,用于在 app 运行的设备上进行访问和执行等操作,它提供了以下操作
- 更改设备旋转
- 按D-pad按钮
- 按返回、主屏幕、菜单按钮
- 打开通知栏
- 对当前窗口进行屏幕截图
更多的 UI Automator API
利用 UI Automator API,可以编写稳健可靠的测试,而无需了解目标应用的实现详情
下面将列出常见的类,它们都是在 android.support.test.uiautomator 这个库下的
类 | 类名 | 作用 |
UiDevice | 设备封装类 | 上面说到的,获取设备信息和设备交互 |
UiObject | 所有空间抽象类 | 表示设备上可见的一个Android控件 |
UiSelector | 控制选择器 | 在设备上查询一个或多个目标 UI 元素 |
Configurator | 配置基类 | 设置运行 UI Automator 测试所需的关键参数 |
UiScrollable | 滚动控件 | 当目标控件存在于屏幕之外时使用 |
UiCollection | 控件集合 | 控件遍历,枚举容器的 UI 元素以便计算子元素个数 |
划重点
- 其中 UiSelector 在 appium 自动化代码选择元素时候直接使用到的
- 用来生成一个定位器来选择界面中的控件元素,可以通过text,content-desc,class,和一些状态信息来进行条件过滤
- UiSelector 类似于 appium中 find_element_by_xxx() 方法中函数值
- UiSelector官方文档:https://developer.android.google.cn/reference/android/support/test/uiautomator/UiSelector
难点
- 使用 UI Automator API,需要写Java 代码哦!
- 当然如果没有基础的话,记住对应的语法格式就行
UiSelector 的栗子
Java语法
- new UiSelector().resourceId(“io.manong.developerdaily:id/tv_tab_title”)
结合Appium 的用法
- driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.hpbr.bosszhipin:id/tv_tab_label")')
还是结合boss直聘 app 做例子哦
环境要求:Android
代码
- # 此处省略配置代码...
- # 通过resourceId
- test = driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.hpbr.bosszhipin:id/tv_tab_label")')
- print(test.text)
- # 通过text
- test = driver.find_element_by_android_uiautomator('new UiSelector().text("附近")')
- print(test.text)
- # 通过className
- test = driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.TextView")')
- print(test.text)
输出结果
- 推荐
- 附近
- 自动化测试
UiSelector 还可以通过哪些方法来定位元素
基本上除了xpath之外,可以通过appium实现的元素定位方式,UIAutomator也有,因为底层就是靠他实现的
xpath 虽然没有直接对应的方法,但是像下面这种 xpath 写法,UIAutomator 也有对应的方法
- // :表示任意后代关系
- x[n] : 表示第几个子节点
小栗子
- # 正常appium写法
- test = driver.find_elements_by_id("com.hpbr.bosszhipin:id/tv_tab_label")[1]
- # 结合uiautomator写法
- test = driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.hpbr.bosszhipin:id/tv_tab_label").enabled(true).instance(1)')
emmm...两种写法得到的结果是一样的,但第二种写法有点复杂就是了...太长了
UI Automator 的总结
- 当 Appium 封装的方法无法满足你的需求的时候可以尝试用 UI Automator API 去解决问题
- 但不建议,在日常工作中全都用 UI Automator API,学习成本 & 编写成本 & 维护成本都会高很多(当然,你想装逼也不是不可以)
Appium自动化(10) - appium高级元素定位方式之 UI Automator API 的详解的更多相关文章
- 【python+selenium的web自动化】- 8种元素定位方式详解
我们在做WEB自动化时,最根本的就是操作页面上的各种元素,而操作的基础便是元素的定位,只有准确地定位到唯一元素才能进行后续的自动化控制,下面将对各种元素定位方式进行总结归纳. 说明:以下操作统 ...
- Appium常用的3种元素定位方式
以最右App为例 .apk文件网盘地址: 链接:https://pan.baidu.com/s/1L4MYkhpb5ECe8XeaneTx_Q 提取码:0jqm 1.find_element_by_i ...
- 6.1 python+appium元素定位方式(登录app)
1.0.0 :常见的十种元素定位方式 .driver.find_element_by_id() #id定位 .driver.find_element_by_name() #name定位(已经凉 ...
- App自动化《元素定位方式、元素操作、混合应用、分层设计、代码方式执行Pytest 命令》
坚持原创输出,点击蓝字关注我吧 作者:清菡 博客:oschina.云+社区.知乎等各大平台都有. 目录 一.App 元素定位方式 二.元素操作 三.测试混合应用 四.以代码的方式执行 Pytest 命 ...
- Appium常用操作之「元素定位、swipe 滑屏操作」
坚持原创输出,点击蓝字关注我吧 作者:清菡 博客:oschina.云+社区.知乎等各大平台都有. 目录 一.打开 uiautomatorviewer 二.Appium 常用操作 1.用 layui 做 ...
- APPIUM-Android自动化元素定位方式
一.常用元素定位方法 appium从selenium中继承了所有的元素定位方法, 并且增加了一些自己的元素定位方式,下方截图分别为selenium和MobileBy包源码: 但是从继承selenium ...
- App自动化之dom结构和元素定位方式(包含滑动列表定位)
900×383 38 KB 先来看几个名词和解释: dom: Document Object Model 文档对象模型 dom应用: 最早应用于html和js的交互.界面的结构化描述, 常见的格式为h ...
- 技术分享 | app自动化测试(Android)--元素定位方式与隐式等待
原文链接 元素定位是 UI 自动化测试中最关键的一步,假如没有定位到元素,也就无法完成对页面的操作.那么在页面中如何定位到想要的元素,本小节讨论 Appium 元素定位方式. Appium的元素定位方 ...
- selenium8中元素定位方式
Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素才能进行后续的自动化控制,我在这里将对各种元素定位方式进行总结归纳一下. 这里将统一使用百度 ...
随机推荐
- Metasploit渗透测试环境搭建
渗透测试实验环境搭建 下载虚拟机镜像 5个虚拟机镜像,其中Linux攻击机我选择用最新的kali Linux镜像,其余的均使用本书配套的镜像. 网络环境配置 VMware虚拟网络编辑器配置: 将VMn ...
- 一款被大厂选用的 Hexo 博客主题
首先这是一篇自吹自擂的文章,主题是由多位非前端程序员共同开发,目前经过一年半的迭代已经到达 v1.8.0 版本,并且获得大量认可,甚至某大厂员工已经选用作为内部博客,因此我决定写这篇文章向更多人安利它 ...
- #Week2 Linear Regression with One Variable
一.Model Representation 还是以房价预测为例,一图胜千言: h表示一个从x到y的函数映射. 二.Cost Function 因为是单变量线性回归,所以假设函数是: \[h_{\th ...
- 数学--数论--Alice and Bob (CodeForces - 346A )推导
It is so boring in the summer holiday, isn't it? So Alice and Bob have invented a new game to play. ...
- python selenium(定位方法)
一.定位方法 注意:元素属性必须唯一存在 #id定位 find_element_by_id() #name定位 find_element_by_name() #class_name定位 find_el ...
- 题目分享C 二代目
题意:一个数列是由 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6.....组成,也就是1-1,1-2,1-3......并且如果遇到多位数也要拆成数字比如1-10 ...
- 题目分享N
题意:有辆车,有r行,s*2列,在第s列和第s+1列之间有个过道,出口在第r+1行的过道处,现在给出每个人的位置(行号和列号),每人每次只能动一格,问最少耗费多长时间全员才能逃出去 分析:假如车上只有 ...
- SpringBoot上传文件大小限制
SpringBoot默认上传文件大小不能超过1MB,超过之后会报以下异常: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSize ...
- webpack----js的静态模块打包器
webpack----js的静态模块打包器 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 简介 webpack 是一个现代 J ...
- C. Barcode dp
https://codeforces.com/problemset/problem/225/C 这个题目和之前一个题目很像 https://www.cnblogs.com/EchoZQN/p/1090 ...