本文将分享Android相关基础知识和Android 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控件的定位其实就是节点和属性的定位,Android App推荐使用uiautomatorviewer工具进行定位,它是 sdk路径下的一个工具。也可以用Appium inspector工具来定位。

uiautomatorviewer定位

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

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

Appium inspector工具

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

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

编辑Desired Capabilities

Capability设置:

  • 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:是否在测试前后重置相关环境(例如首次打开弹框,或者是登录信息)
  • unicodeKeyBoard:是否需要输入非英文之外的语言并在测试完成后重置输入法
  • dontStopAppOnReset:首次启动的时候,不停止app(可以调试或者运行的时候提升运行速度)
  • skipDeviceInitialization:跳过安装,权限设置等操作(可以调试或者运行的时候提升运行速度)

其他更多参数参考官方文档: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--

文章标题:App控件定位

本文作者:hiyo

本文链接:https://www.cnblogs.com/hiyong/p/14163653.html

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

App控件定位的更多相关文章

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

    原文链接 客户端的页面通过 XML 来实现 UI 的布局,页面的 UI 布局作为一个树形结构,而树叶被定义为节点.这里的节点也就对应了要定位的元素,节点的上级节点,定义了元素的布局结构.在 XML 布 ...

  2. 【转】Appium基于安卓的各种FindElement的控件定位方法实践

    原文地址:http://blog.csdn.net/zhubaitian/article/details/39754041#t11 AppiumDriver的各种findElement方法的尝试,尝试 ...

  3. Appium基于安卓的各种FindElement的控件定位方法实践和建议

    AppiumDriver的各种findElement方法的尝试,尝试的目标应用是SDK自带的Notepad应用. 1. findElementByName 1.1 示例 el = driver.fin ...

  4. Atitit gui控件定位解决方案

    Atitit gui控件定位解决方案 1.1. 但是AUTOIT没有找图功能..可以请大侠们写一份这个UDF出来吗?1 1.2. ahk1 1.3. Java +opencv 模板匹配2 1.1. 但 ...

  5. Appium基于安卓的各种FindElement的控件定位

    转自:http://www.2cto.com/kf/201410/340345.html 1. findElementByName 1.1 示例 ? 1 2 el = driver.findEleme ...

  6. appium 控件定位

    转自:http://www.2cto.com/kf/201410/340345.html AppiumDriver的各种findElement方法的尝试,尝试的目标应用是SDK自带的Notepad应用 ...

  7. 转载:Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)

    来源于:http://blog.csdn.net/zhubaitian/article/details/39803857 1. 背景 为保持这个系列的一致性,我们继续用SDK自带的NotePad实例应 ...

  8. Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)

    本人之前以前撰文描写叙述Appium和UIAutomator框架是怎样定位Android界面上的控件的. UIAutomator定位Android控件的方法实践和建议 Appium基于安卓的各种Fin ...

  9. appium简明教程(10)——控件定位基础

    狭义上讲,UI级的自动化测试就是让机器代替人去点来点去的过程. 但机器去点什么(点上面还是点左边),怎么点(是长按还是轻触),这些东西是必须由代码的编写者所指示清楚的. 控件定位就是解决机器点什么的问 ...

随机推荐

  1. 斜率优化DP复习笔记

    前言 复习笔记2nd. Warning:鉴于摆渡车是普及组题目,本文的难度定位在普及+至省选-. 参照洛谷的题目难度评分(不过感觉部分有虚高,提高组建议全部掌握,普及组可以选择性阅读.) 引用部分(如 ...

  2. NOI Online #2 提高组 游记

    没 NOI Online 1 挂的惨就来写游记吧,不知道为啥 NOI Online 1 民间数据测得 60 分的 T1 最后爆零了... 昏昏沉沉的醒来,吃了早饭,等到 \(8:30\) 进入比赛网页 ...

  3. uni-app中使用sass

    uni-app在创建时,工程目录下会有个uni.scss文件,我们可以直接在里面定制化scss变量. 全局scss中的坑: 1.如果要引用全局外部scss文件,可以考虑在uni.scss这个系统全局s ...

  4. sql注入之双查询注入

    双查询注入前需要了解什么是子查询 子查询可以理解在一个select语句中再插入一个select 里面的select语句就是子查询 例子:select concat((select database() ...

  5. 七、Jmeter测试元件-线程

    线程组元素是任何测试计划的起点.所有控制器和采样器必须在线程组下.其他元素(例如,侦听器)可以直接放置在测试计划下. 名称:相当于一个业务流程 继续:当取样器出错时 会继续请求: 举例:1-当一个线程 ...

  6. MySQL PXC集群安装配置

    1.关闭防火墙 [root@node04 ~]#systemctl disable firewalld [root@node04 ~]#systemctl stop firewalld [root@n ...

  7. JavaSE06-面向对象

    1. 类和对象 1.1 类和对象的理解 客观存在的事物皆为对象 ,所以我们也常常说万物皆对象. 类 类的理解 类是对现实生活中一类具有共同属性和行为的事物的抽象 类是对象的数据类型,类是具有相同属性和 ...

  8. mini-web框架-装饰器-总结2(5.3.2)

    @ 目录 1.说明 2.代码 关于作者 1.说明 多级装饰器嵌套 带参数的装饰器 这里打印print(index) 会在函数定义的时候@test(222) 就被调用,返回一个test2继续装饰 2.代 ...

  9. CSRF学习

    前提环境:网站存在CSRF漏洞(也就是过于相信访问请求,只判断了用户是否存在cookie,并未判断请求的发起者) CSRF攻击原理,用户A需要转账,用户A正常向银行网站发送请求登录,登录成功后银行网站 ...

  10. robotframework脚本中的文档注释

    生成文档命令 python -m robot.libdoc xxx.robot xxx.html   语法说明 = 说明 = h2标题,注意第一个等号前有四个空格,==中间文字两边各有一个空格 == ...