文章目录

  • 一、app自动化控制
    • 1、清理数据:
    • 2、启动:
    • 3、关闭:
  • 二、常见控件定位方法
    • 1、android知识
    • 2、ios 基础知识
    • 3、元素定位
    • 4、控件基础知识
    • 5、app dom 结构解析
    • 6、iOS 与 Android dom 结构的区别
    • 7、定位方法
      • 测试步骤三要素
      • 定位方式:
  • 三、常见的控件定位方法
    • 1、App 定位方式进阶
    • 2、选择定位器通用原则
    • 3、元素定位的写法
    • 4、ID 定位
    • 5、ACCESSIBILITY_ID 定位
    • 6、XPath 定位
      • a、XPath 单属性定位
      • b、XPath 多属性定位
    • 7、Android 原生定位
      • a、Android 原生定位 - 单属性定位
      • b、Android 原生定位-组合定位
      • c、Android 原生定位-模糊匹配
      • d、Android 原生定位-层级定位
      • e、滑动查找元素

一、app自动化控制

1、清理数据:

driver.clear()

2、启动:

方式一:
webdriver.remote("url",desirecapability)
方式二:
launch_app():将应用启动起来(新版本不用了)
driver.activate_app("com.tencent.wework"):直接启动desire里设置的package以及activity的相关设置参数,只启动当前测试的应用

3、关闭:

driver.close()

二、常见控件定位方法

1、android知识

Android 是通过容器的布局属性来管理子控件的位置关系,布局关系就是把界面上的所有的空间,根据他们的间距的大小,摆放在正确的位置

Android 七大布局

LinerLayout(线性布局)
RelativeLayout(相对布局)
FrameLayout(帧布局)
AboluteLayout(绝对布局)
TableLayout(表格布局)
GridLayout(网格布局)
ConstraintLayout(约束布局

Android 四大组件

activity 与用户交互的可视化界面
service 实现程序后台运行的解决方案
content provider 内容提供者,提供程序所需要的数据
broadcast receiver 广播接收器,监听外部事件的到来(比如来电)

常用的控件

TextView(文本控件),EditText(可编辑文本控件)
Button(按钮),ImageButton(图片按钮),ToggleButton(开关按钮)
ImageView(图片控件)
CheckBox(复选框控件),RadioButton(单选框控件)

布局

是可用于放置很多控件的容器按照一定的规律调整内部控件的位置由此构成界面。

嵌套布局

布局内部放置布局,多层布局嵌套,可以完成复杂的界面结构

2、ios 基础知识

布局
iOS 不使用布局的概念,用变量之间的相对关系完成位置的计算
注意
使用 Appium 测试 iOS 应用需要使用 MacOS 操作系统

3、元素定位

概念:元素定位的含义就是定位控件
注意:同一脚本同时支持 android/iOS 两个系统的前提是:
元素属性(id,aid,xpath 等)一致

4、控件基础知识

dom:Document Object Model 文档对象模型
dom 应用:用于表示界面的控件层级,界面的结构化描述
常见的格式:html、xml
核心元素:节点、属性
xpath:xml路径语言,用于xml 中的节点定位

Anrdroid 应用的层级结构与 html 不一样,是一个定制的 xml
app source 类似于 dom ,表示 app 的层级,代表了界面里面所有的控件树的结构
每个控件都有它的属性(resourceid,xpath,aid),但是没有 css 属性

5、app dom 结构解析

6、iOS 与 Android dom 结构的区别

dom 属性和节点结构类似
名字和属性命名不同
android 的 resourceid 和 ios 的 name
android 的 content-desc 和 ios 的 accessibility-id

7、定位方法

测试步骤三要素

定位、交互、断言

定位方式:

id 定位
accessibilty_id 定位
xpath 定位
classname 定位(不推荐)

三、常见的控件定位方法

Accessibility ID:识别一个唯一的 UI 元素,
对于 XCUITest 引擎,它对应的的属性名是 accessibility-id,
对于 Android 系统的页面元素,对应的属性名是 content-desc
Class name
对于 iOS 系统,它的 class 属性对应的属性值会以XCUIElementType开头,
对于 Android 系统,它对应的是 UIAutomator2 的 class 属性(e.g.: android.widget.TextView)
ID:原生元素的标识符,
Android 系统对应的属性名为resource-id,
iOS 为name
Name:元素的名称
XPath:使用 xpath 表达式查找页面所对应的 xml 的路径

1、App 定位方式进阶

Image:通过匹配 base 64 编码的图像文件定位元素
Android UiAutomator (UiAutomator2 only):使用 UI Automator 提供的 API, 尤其是 UiSelector 类来定位元素,在 Appium 中,会发送 Java 代码作为字符串发送到服务器,服务器在应用程序的环境中执行这段代码,并返回一个或多个元素
Android View Tag (Espresso only):使用 view tag 定位元素
Android Data Matcher (Espresso only) :使用 Espresso 数据匹配器定位元素
IOS UIAutomation: 在 iOS 应用程序自动化时,可以使用苹果的 instruments 框架查找元素

2、选择定位器通用原则

与研发约定的属性优先
android 推荐 content-description
ios 推荐 label
身份属性 id
组合定位 xpath,css
其它定位

3、元素定位的写法

返回单个元素 WebElement
driver.find_element(AppiumBy.xxx, "xxx属性值")
返回元素列表 [WebElement, WebElement, WebElement…]
driver.find_elements(AppiumBy.xxx, "xxx属性值")

driver.find_element(AppiumBy.ID, “ID属性值”)
driver.find_element(AppiumBy.XPATH, “xpath表达式”)
driver.find_element(AppiumBy.CLASS_NAME, “CLASS属性值”)
driver.find_element(AppiumBy.ACCESSIBILITY_ID, “ACCESSIBILITY_ID表达式”)
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, “android uiautomator 表达式”)
driver.find_element(AppiumBy.IOS_UIAUTOMATION, “ios uiautomation 表达式”)
driver.find_element(AppiumBy.ANDROID_VIEWTAG, “ESPRESSO viewtag 表达式”)
driver.find_element(AppiumBy.ANDROID_DATA_MATCHER, “ESPRESSO data matcher 表达式”)
driver.find_element(AppiumBy.IMAGE, “IMAGE图片”)

driver.find_elements(AppiumBy.ID, “ID属性值”)
driver.find_elements(AppiumBy.XPATH, “xpath表达式”)
driver.find_elements(AppiumBy.CLASS_NAME, “CLASS属性值”)
driver.find_elements(AppiumBy.ACCESSIBILITY_ID, “ACCESSIBILITY_ID表达式”)
driver.find_elements(AppiumBy.ANDROID_UIAUTOMATOR, “android uiautomator 表达式”)
driver.find_elements(AppiumBy.IOS_UIAUTOMATION, “ios uiautomation 表达式”)
driver.find_elements(AppiumBy.ANDROID_VIEWTAG, “ESPRESSO viewtag 表达式”)
driver.find_elements(AppiumBy.ANDROID_DATA_MATCHER, “ESPRESSO data matcher 表达式”)
driver.find_elements(AppiumBy.IMAGE, “IMAGE图片”)

4、ID 定位

通过身份标识 id 查找元素
写法:find_element(AppiumBy.ID, “ID属性值”)

self.driver.find_element(AppiumBy.ID,"android:id/text1")

通过身份标识 id 查找元素,对应的是resource-id

5、ACCESSIBILITY_ID 定位

通过 accessibility id 查找元素
写法:find_element(AppiumBy.ACCESSIBILITY_ID, "ACCESSIBILITY_ID属性值")

self.driver.find_element(AppiumBy.ACCESSIBILITY_ID,'App')

通过 accessibility_id查找元素,对应的是content-desc

6、XPath 定位

/从根节点选取(取子节点)。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(取子孙节点)
.选取当前节点。
.. 选取当前节点的父节点。
@选取属性。

a、XPath 单属性定位

基本表达式://*[@属性名=‘属性值’]

self.driver.find_element(AppiumBy.XPATH,'//*[@text="Content"]')

b、XPath 多属性定位

表达式://*[@属性名=‘属性值’ and @属性名=‘属性值’ ]

7、Android 原生定位

元素属性定位
ID 定位
文本定位
文本匹配定位
父子关系定位
兄弟关系定位

a、Android 原生定位 - 单属性定位

格式 'new UiSelector().属性名("<属性值>")'
比如:‘new UiSelector().resourceId(“android:id/text1”)’
注意外面是单引号,里面是双引号,顺序不能变
可以简写为 属性名(“<属性值>”)’
比如:·resourceId(“android:id/text1”)

    def test_uiautomator(self):"""android uiautomator"""element=self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().resourceId("android:id/text1")')element.click()

b、Android 原生定位-组合定位

多个属性同时确定元素的(多个属性任意组合 ,不限长度)

    def test_uiautomator1(self):"""android uiautomator"""element=self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().resourceId("android:id/text1").text("App")')element.click()

c、Android 原生定位-模糊匹配

文字包含
文字以 x 开头
文字正则匹配

# 模糊匹配
def test_android_uiautomator_by_text_contains(self):print(self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().textContains("ssi")').text)def test_android_uiautomator_by_text_start_with(self):print(self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().textStartsWith("Ani")').text)def test_android_uiautomator_by_text_match(self):print(self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().textMatches("^Pre.*")').text)

d、Android 原生定位-层级定位

兄弟元素定位 fromParent
父子结点定位 childSelector, 可以传入 resourceId() , description() 等方法

# 查找目标元素Text,先找App ,fromParent() 方法可以查找兄弟结点
new UiSelector().text("App").fromParent(text("Text"))# 根据父结点查找子结点/ 子孙结点
new UiSelector().className("android.widget.ListView").childSelector(text("Text"))
滑动查找元素
new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("查找的元素文本").instance(0))

e、滑动查找元素

格式如下:

‘new UiScrollable(new
UiSelector().scrollable(true).instance(0)).scrolllntoView(new
UiSelector().text("查找的文本”).instance(0));'

app自动化测试——app自动化控制、常见控件定位方法相关推荐

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

    AppiumDriver的各种findElement方法的尝试,尝试的目标应用是SDK自带的Notepad应用. 1. findElementByName 1.1 示例 [java]  view pl ...

  2. App自动化02-元素定位、显示与隐式等待、常见控件交互方法

    1.demo案例 selenium 版本建议 3.141.0(pip install selenium==3.141.0) appium-python-client 版本建议 1.2.0 import ...

  3. selenium控制日历控件

    ​在使用selenium爬取数据时,有时会需要选择日期,来获取某个时间段的数据.网页上日历控件一般是一个文本输入框,鼠标点击,就会弹出日历界面,可以选择具体日期.这篇就介绍用selenium如何实现自 ...

  4. android tv 开发布局,Android TV开发总结(七)构建一个TV app中的剧集列表控件

    前言:剧集类控件,在TV app中非常常见,今天将介绍构建一个TV app中的剧集列表控件,此控件上传到我的Github:https://github.com/hejunlin2013/Episode ...

  5. App控件定位:Android 控件介绍及元素定位方法

    本文将分享Android相关基础知识和Android APP控件定位工具的使用方法. 目录 Android基础知识 Android布局 Android四大组件 1.activity 2.Service ...

  6. 一行代码实现 ofo app 首次注册时的步骤控件

    StepDialog 项目地址:guangzq/StepDialog  简介:一行代码实现 ofo app 首次注册时的步骤控件 更多:作者   提 Bug    标签: DialogFragment ...

  7. [Android Studio]掌握Android Studio的五种常见控件和五种常见布局

    目录 一.View和ViewGroup 二.Android的五种常见控件 2.1 文本控件 2.1.1 TextView 2.1.2 EditText 2.2 按钮控件 2.2.1 Button 2. ...

  8. 软件测试多次点击按钮叫什么方法,常见控件的测试点 - 爱昵容儿 的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

    视频:软件测试--常见控件测试之一 源文档 > 视频:软件测试--常见控件测试之三 源文档 常见控件的测试和常见功能点击系统权限 常见控件的名称和测试方法 文本框:用文字工具划出画出来的,用来编 ...

  9. 控制 WebBrowser 控件的外观和行为

    控制 WebBrowser 控件的外观和行为 2011-03-23 09:33 在 CSDN 上经常看到以下两个问题: 1.在 MFC 应用程序中,如果创建了一个 WebBrowser 控件(包括 C ...

最新文章

  1. 虚拟机磁盘类型_虚拟机存储类型分为哪些种类
  2. Altium Designer 发现的机密
  3. thinkphp中data方法
  4. mysql optimize 作用_mysql optimize table
  5. html 存储登录状态,Vue中保存用户登录状态实例代码
  6. 链计算:构建信任网络,致力无边界协同
  7. Win2008 R2 VDI动手实验系列之一:Active Directory搭建
  8. DevOps交付模式下,软件测试的那些事
  9. springmvc initial初始化
  10. 如何为 Apple 设备使用通用控制?
  11. 通过 Socket 实现 TCP 编程入门
  12. linux_shell_命令行查单词/shell英文词典工具包(sdcv/dict/trans/wd)
  13. STM32控制启动步进电机
  14. CVTE实习应聘经验
  15. 梁念坚致辞Tech ED2009 主推Windows7
  16. java 翻译 go语言_【翻译】go是面向对象语言吗?
  17. 自定义 ZuulFilter抛出异常
  18. 完美扒站, 整站下载
  19. 超市零售数据分析-大数据项目
  20. 机器视觉尺寸检测基础介绍

热门文章

  1. 【数据结构与算法】课程设计报告
  2. 机器人操作系统(ROS):未来机器人编程的关键核心
  3. linux用不了wifi密码忘记了,极路由wifi密码忘记了怎么办?
  4. 计算机中丟失Slc.dll,调试符号不会加载slc.dll和sppc.dll
  5. 利用python预测交通拥堵_Python pyecharts 绘制的交通拥堵情况地图
  6. MYSQL--架构--MGR--理论--04--事务和冲突检测机制
  7. 双十二大家都在买哪些书?这份书单请码住
  8. python神经网络预测股票_用神经网络预测股票市场
  9. 年终盘点丨细数2017云栖社区20大热点话题(附100+话题清单)
  10. C/C++——游戏界面设置(graphics)