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 元素以便计算子元素个数

划重点

难点

  • 使用 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(')
print(test.text)

 通过text
test = driver.find_element_by_android_uiautomator(new UiSelector().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,学习成本 & 编写成本 & 维护成本都会高很多(当然,你想装逼也不是不可以)

原文地址:https://www.cnblogs.com/poloyy

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


前言:appium可以说是app最火的一个自动化框架,它的主要优势是支持android和ios,另外脚本支持java和python。以下为python+appium的安装教程...环境准备...1、配置java环境:见之前随笔--验证jdk和 androidsdk安装是否成功: 2、python安装:见之前随笔 3、安装node.js--官网
(原文:https://www.cnblogs.com/fancy0158/p/10047906.html)TestSuite套件可以添加很多个用例后运行,但是每个用例都需要调用addTest()函数。当测试用例很多时,需要把用例拆分,写到不同的.py文件中。一个简单的测试项目目录如下:测试用例放在同一个文件夹或不同目录下,此时可以使用unit
一Appium介绍1.1含义开源,跨平台,多语言支持的移动应用自动化工具1.2测试对象原生APP:就是专门针对某一类移动设备而生的,所有界面和代码都是专门为平台设计。混合APP:指它的一部分是原生界面和代码,而另一部分是内嵌webapp。移动web APP现在基本上可以打开网页浏览的APP都是
前言:Appium是一个自动化测试开源工具,支持iOS平台和Android平台上的原生应用,web应用和混合应用。一、环境配置1、安装Node.jshttps:/odejs.org/2、安装Appiumhttp://appium.io/ 3、安装AndroidSDKhttp:/ools.android-studio.org/index.php/sdk4、安装Python-c
转:https://blog.csdn.net/Tigerdong1/article/details/80159156前段时间用一种流行语言,一个主流工具,一个实用框架,写了一个美团app自动化测试的Demo,利用appium+python+unittest+uiautomatorviewer,编写了测试用例,并通过HTMLTestRunner输出测试报告。Appium环境搭建的过程就不说了(这
(原文:https://www.cnblogs.com/fancy0158/p/10056418.html)移动端执行完测试case之后,通过邮件自动发送测试报告。大体流程如下:1、通过unittest框架的discover()发现所有测试用例2、使用HTMLTestRunner的run()方法运行测试用例,生成HTML测试报告3、寻找测试报告目录下的最新测试报
输入命令adbshelldumpsyswindoww|findstr\/|findstrname=然后在手机端打开app,电脑上按enter就即可显示以微信为例子 appPackage=com.tencent.mmappActivity=.ui.LauncherUI
appium更新uiautomator后可以获取tost了,大家都尝试,课程中也讲解了,但是这些跑的时候都在单机上,当我们多机并发的时候会出现一个端口问题,因为我们appium最后会调用uiautomator2,但是多个机器的时候只会有一个机器会正常运行。这个就是因为uiautomator2端口占用问题,这个只需要在我
http://www.cnblogs.com/sundalian/p/5629500.html1.定位元素应用元素 1.1通过id定位元素Android里面定位的id一般为resrouce-id:代码可以这样写:WebElementelement=driver.findElement(By.id("com.tencent.mm:id/do"));或者:driver.findElementById("com.tencent.mm:
有时需要测试APP产品的耗电问题,但用自动化又面临了一个USB接电脑供电的问题,从而导致计算出来的功耗与手动跑,存在有很大的误差,因此可使用wifi无线连接到手机进行自动化测试,解决功耗问题。前提条件:1、确保手机已经开启Root权限2、手机和PC要在一个网段(从PC端可以ping通手机端的
1、手机滑动-swip#FileName:Tmall_App.py#Author:Adil#DateTime:2018/3/2517:22#SoftWare:PyCharmfromappiumimportwebdrivercaps={}caps['platformName']='Android'caps['platformVersion']='6.0'
(原文:https://www.cnblogs.com/fancy0158/p/10046333.html)unittest提供的Fixtures用以在测试执行前和执行后进行必要的准备和清理工作,可以定义在模块、类、用例执行前后的工作1、模块在模块中定义setUpModule()和tearDownModule()处理模块执行前后的工作defsetUpModule():
1.ready.py文件defgetport():aport=random.randint(4700,4900)#判断端口是否被占用whilegetDeviceInfo.is_open('127.0.0.1',aport):aport=random.randint(4700,4900)bpport=random.randint(4700,4900)whilegetDeviceInfo.is_open
涉及到的软件:appium、SDK、AVD、夜神模拟器、AIrtest、pycharm以下是基于window环境一、首先部署的环境是:appium+SDK+AVD+pycharm1.java环境:java-version2.node环境:node-V下载地址:https:/odejs.org/en/ 3.SDK安装下载地址:http:/ools.android-studio.org/index.php
windowscmdusages:start/B#启动应用程序,但不创建新窗口。appiumcmdusage(appiumserver):[-aADDRESS]#指定监听的ip,如127.0.0.1[-pPORT]#指定appium端口,如4723[-UUDID]#指定连接的设备名称,如emulator-5554[-bpBOOTSTRAPPORT]#指定appium和设备通信
工具一:uiautomatorviewer1、在SDK的tools目录中找到uiautomatorviewer,双击打开若出现闪退一般是jdk版本不匹配(建议安装jdk1.8的);2、在使用这个工具前,这个工具启动脚本配置有问题,需要我们修改启动批处理代码,否则会出现如下错误;      需要我们手工编辑uiautomatorviewer.
appium配置示例{“platformName”:“Android”,“platformVersion”:“4.4.2”,“deviceName”:“127.0.0.1:62001”,“app”:“E:/dev_doc/appiumxnews.apk”,“appPackage”:“com.tencent.news”,“appActivity”:“com.tencent.news.activity.SplashActivit
Appium之Python运行环境搭建Part1by:授客QQ:1033553122实践环境Win7 Python3.4.0 JAVAJDK1.8.0_121 node.js8.11.1LTS下载地址:https:/odejs.org/en/  Appium-Python-ClientAppium-Python-Client-0.26.tar.gz下载地址:https://pypi.org/project/Appium-Py
环境依赖Node.jsAppiumAppium-desktopAppium-doctorAppium-Python-ClientPythonJDKAndriodSDK安装Node.js下载地址:https:/odejs.org/en/downloadeleases/注意:Node.js版本要注意与Appium兼容,本套教程Appium版本是1.7.2,则选择的Node.js版本为6.11.3安装完成后
夜神模拟器连接adbok,使用appium运行代码断掉连接问题: 最近在学习appium,在配置完环境后,启动夜神模拟器,在cmd窗口输入adbdevices显示已经与模拟器连接了,但是启动appium运行代码的时候,提示没有找到devices,如下图。排查过程:1.再次在cmd里面输入adbdevices,发现无法连接2.在cmd