本文将分享Android相关基础知识和Android APP控件定位工具的使用方法。

目录

  • Android基础知识
    • Android布局
    • Android四大组件
      • 1、activity
      • 2、Service
      • 3、Content Provider
      • 4、Broadcast Receiver
    • Android控件
  • App控件定位
    • uiautomatorviewer定位
    • weditor
    • Appium inspector工具
  • 用例录制
  • Python + Appium启动APP
  • 系列文章

Android基础知识

Android布局

Android是通过容器的布局属性来管理子控件的位置关系(iOS去掉了布局的概念,直接用变量之间的相对关系完成位置的计算),把界面上所有的控件根据他们的间距的大小,摆放在正确的位置。布局是一种可用于放置很多控件的容器,通过多层布局嵌套完成一些比较复杂的界面。

Android布局有LinearLayout(线性布局)、RelativeLayout(相对布局)、FrameLayout(帧布局)、AbsoluteLayout(绝对布局)、TableLayout(表格布局)、Grid layout(网格布局)、ConstraintLayout(约束布局)等。布局的内部除了放置控件外,也可以放置布局,通过多层布局的嵌套,我们就能够完成一些比较复杂的界面。

Android四大组件

Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,Broadcast Receiver广播接收器。

1、activity

  • 与用户交互的可视化界面
  • 一个Activity通常就是一个单独的屏幕(窗口)
  • Activity之间通过Intent进行通信

2、Service

  • service 实现后台运行程序,在后台完成用户指定的操作
  • 通常用于为其他组件提供后台服务或监控其他组件的运行状态。

3、Content Provider

  • content provider 内容提供者,提供程序所需要的数据
  • 只有需要在多个应用程序间共享数据才需要内容提供者,是不同应用程序间共享数据的唯一方式。

4、Broadcast Receiver

  • 监听外部事件的到来(比如来电)

Android控件

常用的控件:

  • TextView(文本控件),EditText(可编辑文本控件)

  • Button(按钮),imageButton(图片按钮),ToggIeButton(开关按钮)

  • Image View(图片控件)

  • CheckBox(复选框控件), RadioButton(单选框控件)

元素定位实际上就是定位控件,Android应用的层级结构使用xml编写,xml全名叫可扩展标记语言,类似于HTML,可以看作一个微型的数据库。android系统里安装的每一个app,其信息都被存到一个xml里。

xml定义了节点和属性,每个控件都有它的属性(resourceid, xpath, aid),没有css属性(样式文件和布局xml文件是分开的)。

Android中提供了三种解析XML的方式:DOM(Document Object Model)、SAX(Simple API XML)以及Pull解析方式。DOM解析器在解析XML文档时,会把文档中的所有元素按照其出现的层次关系,解析成一个个Node对象(节点),形成Dom树。DOM允许用户遍历文档树,访问父节点、子节点或者兄弟节点。每个节点具有特定的属性:

  • clickable
  • content-desc
  • resource-id
  • text
  • bounds

App控件定位

对App控件的定位其实就是节点和属性的定位,下面介绍三种UI元素定位工具:

  • Android App可以使用uiautomatorviewer工具进行定位,它是 sdk路径下的一个工具。
  • 基于浏览器技术的weditor 工具
  • Appium inspector工具

uiautomatorviewer定位

电脑通过无线或者USB连接到手机设备后(或者连接到模拟机),双击uiautomatorviewer.bat打开uiautomatorviewer工具。

点击左上角第二个或者第三个图标获取当前手机APP页面,在右边可以看到app的xml结构树,可以获取到每个节点的详细属性。

weditor

weditor是基于浏览器技术的UI查看器,直接在浏览器打开。

项目地址:https://github.com/alibaba/web-editor。

环境要求Python3.6+,通过pip安装:

pip3 install -U weditor # 会安装uiautomator2和facebook-wda两个库,分别支持android和iOS APP。

在命令窗口输入如下命令运行:

$ weditor # 启动server并打开浏览器

启动后会在浏览器自动访问 http://localhost:17310

如果你用appium编写APP自动化用例,而使用weditor来查看页面元素。在运行appium用例脚本时需要停止UiAutomator守护服务,因为UiAutomator相关进程会导致appium依赖的uiautomatorviewer 服务无法运行。

关闭方法参考文档 https://github.com/openatx/uiautomator2#stop-uiautomator 。

Appium inspector工具

打开appium,点击【启动服务器】

点击右上角搜索标志图标【Start Inspector Session】

编辑Desired Capabilities

Capability设置:https://appium.io/docs/en/writing-running-appium/caps/

  • platformName:Android或者iOS
  • deviceName:设备名,127.0.0.1:7555是网易mumu模拟器,开启后需要使用adb命令adb connect 127.0.0.1:7555连接。
  • appPackage:包名
  • appActivity:Activity名字
  • platformVersion:系统版本
  • automationName:默认使用 uiautomator2(andorid默认使用 uiautomator2,ios默认使用 XCUITest)
  • noReset:是否在测试前后重置相关环境(例如首次打开弹框,或者是登录信息)
  • fullReset:执行完全复位:关闭APP,清除APP数据,卸载apk。
  • unicodeKeyBoard:是否需要输入非英文之外的语言并在测试完成后重置输入法
  • dontStopAppOnReset:首次启动的时候,不停止app(可以调试或者运行的时候提升运行速度)
  • skipDeviceInitialization:跳过安装,权限设置等操作(可以调试或者运行的时候提升运行速度)
  • newCommandTimeout:两条命令的最大间隔时间,默认60s
  • udid:连接设备的唯一标识
  • autoGrantPermissions:自动允许/拒绝弹框信息,默认为false,如果noReset为true时,这个参数不生效

其他更多参数参考官方文档:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md

主要设置好上面介绍的前面6个参数后,点击右下角【Start Session】,可以获取到每个节点的详细属性。

用例录制

appium desktop可以录制用例,并生成测试代码

点击上方眼睛图标,开始录制,手动点击左边app元素,右边显示了三种元素操作方法:Tap、Send Keys、Clear,选择对应的操作

完成后测试步骤后,点击停止录制,右上角可以看到生成的自动化代码,可以选择Java,Python等语言。

获取到app页面元素属性值后就可以使用appium来进行定位,实现对app的操作。下一篇文章将介绍appium元素定位方法。

Python + Appium启动APP

APP自动化测试关键步骤包括:

  • 导入依赖:
    from appium import webdriver
  • capabilities设置
  • 初始化 driver
    webdriver.remote('http://127.0.0.1:4723/wd/hub', desired_caps)
  • 元素定位与操作
  • 断言 assert

下面代码实现打开雪球APP,点击输入框,输入”京东“,然后退出。

#!/usr/bin/python3
# -*-coding:utf-8-*-
from appium import webdriver
desired_caps = {}
# desired_caps['recreateChromeDriverSessions'] = True
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1.1'
desired_caps['deviceName'] = '127.0.0.1:7555'
desired_caps['appPackage'] = 'com.xueqiu.android'
desired_caps['automationName'] = 'Uiautomator2'
desired_caps['appActivity'] = '.common.MainActivity'
desired_caps['newCommandTimeout'] = 3000
desired_caps['unicodeKeyboard'] = True
desired_caps['noReset'] = 'true'
desired_caps['dontStopAppOnReset'] = 'true'
desired_caps['skipDeviceInitialization'] = 'true'
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
driver.implicitly_wait(15)
driver.find_element_by_id("com.xueqiu.android:id/tv_search").click()
driver.find_element_by_id("com.xueqiu.android:id/search_input_text").send_keys("京东")
driver.quit()

--THE END--


系列文章

1、Appium 介绍及环境安装
2、selenium/appium 等待方式介绍
3、App控件定位:Android 控件介绍及元素定位方法
4、Appium元素定位(一)
5、Appium元素定位(二):UiAutomator定位
6、Appium控件交互
7、Android WebView测试
8、AppCrawler自动遍历测试
9、自动遍历测试之Monkey工具
10、App自动化测试工具Uiautomator2
11、App自动化测试工具Airtest
12、Android手机管理平台搭建:STF和atxserver2
13、Windows上实现iOS APP自动化测试:tidevice + WDA + facebook-wda / appium
14、iOS APP自动化:predicate定位
15、iOS APP自动化:class chain定位方法
16、使用facebook-wda进行iOS APP自动化测试


欢迎关注公众号:「测试开发小记」及时接收最新技术文章!

App控件定位:Android 控件介绍及元素定位方法相关推荐

  1. android控件单位,Android控件相对位置及长度单位

    首先讲讲界面布局中的几位置设置参数区别,从下面一个简单的图形来做年对比,A代表我们布局页面中一个ViewGroup,比如是LinearLayout,B代码一个View,比如是Button. andro ...

  2. cypress 框架介绍及元素定位

    一.cypress测试框架目录介绍 fixtures -- 测试家具,需要依赖的静态数据 plugins -- 插件,扩展增强cypress功能 support -- 支持文件,通用配置信息 inte ...

  3. python网页元素定位_用Selenium进行网页元素定位以及常用的定位元素的方法

    用Selenium进行网页元素定位 一.前提条件: 下载.安装Selenium 二.编写定位网页元素的脚本(这里以定位百度网页的元素举例) 1.新建文本文档(可以用任意的文本编辑器,我这里用的是Pyc ...

  4. android设置控件形状,Android控件自定义形状

    Android中处理控件的各种形状可以用到Shape,ApiDemos中有相关的例子,在com.example.android.apis.graphics中的ShapeDrawable1类中有很详细的 ...

  5. 在Android中sidebar控件使用,Android控件--侧边栏SideBar

    说明 很多应用中我们都能看到关于侧边栏的使用,比如微信啊,QQ啊,美团啊等等,最常见的应该就是通讯录里面对联系人进行A~Z的排序.侧边栏主要是方便用户进行字母索引.资料链接:http://www.vo ...

  6. pythonxml解析拿到控件坐标_Python解析xml中dom元素的方法

    本文实例讲述了Python解析xml中dom元素的方法.共享给大家供大家参考.详细实现方法如下: 复制代码 代码如下: from xml.dom import minidom try: xmlfile ...

  7. android学习笔记---57_采用方向传感器实现指南针,android设备传感器介绍,以及使用方法

    Java技术qq交流群:JavaDream:251572072 ------------------------------------------------------ 传感器类型:方向.加速度( ...

  8. python自动化元素定位_Appium+Python自动化 4 -appium元素定位

    appium定位app上的元素方式 在前面文章中有介绍,(通过UIautomator工具查看app元素) appium定位app上的元素,可以通过id,name,class这些属性定位到 1.id 定 ...

  9. Android app UI自动化测试 常用的元素定位方法

    本文简要介绍了移动端Android APP进行UI自动化测试时,常用到的元素定位方法 目录 前言 一.通过resource-id定位 二.通过class name定位 三.通过accessibilit ...

最新文章

  1. WatchStor观察:思科携EMC等合作伙伴 圈地数据中心市场
  2. Linux程序包管理之RPM
  3. boost::make_recursive_variant相关的测试程序
  4. 监视Rails进程内存泄漏的技巧
  5. Spring4-自动装配Beans-通过注解@Autowired在构造方法上
  6. [lct] Luogu P4219 大融合
  7. 图片上添加文字--div
  8. 硬件常见物料识别和单位换算
  9. 苹果自带的清理软件_苹果电脑清理软件哪个好
  10. 数据结构-学习笔记整理
  11. easyExcel导出数据并设置单元格下拉数据
  12. 最小包围球(附完整代码)
  13. 装多系统的U盘启动盘的制作
  14. 神经网络和深度学习的简史
  15. Java:MouseListener、MouseMotionListener监听器与MouseEvent事件
  16. 调用第三方接口的方式(简洁版)
  17. 如何获取屏幕DPI/PPI并计算A4纸在屏幕的大小
  18. 全球及中国视频会议系统市场应用状况与趋势展望分析报告2022版
  19. threejs 特效
  20. 云计算虚拟机实验2020

热门文章

  1. 天天牛邀请码8vozbf 可以领取0代牛
  2. 弹性伸缩自动化:轻松扩展和缩减容量应对业务需求
  3. 创新创业项目答辩会小总
  4. DecimalFormat的用法 Java小数(float、dobule)格式化
  5. Android仿QQ,网易邮箱客户端收件人控件
  6. 个推 tp6 --APP消息推送(Cid单推)
  7. php 压缩视频大小,视频压缩软件如何压缩视频文件大小
  8. 2019-8-18 省赛选拔
  9. 解决neo4j数据库desktop版本与community版本并存导致desktop本地数据无法访问问题
  10. apple pay 集成2