热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

6、iOS 与 Android dom 结构的区别 dom 属性和节点结构类似 名字和属性命名不同 android 的 resourceid 和 ios 的 name android 的 conten

在这里插入图片描述

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 原生定位 - 单属性定位

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

def test_uiautomator(self):"""android uiautomator"""element&#61;self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,&#39;new UiSelector().resourceId("android:id/text1")&#39;)element.click()

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

多个属性同时确定元素的&#xff08;多个属性任意组合 &#xff0c;不限长度&#xff09;

def test_uiautomator1(self):"""android uiautomator"""element&#61;self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,&#39;new UiSelector().resourceId("android:id/text1").text("App")&#39;)element.click()

在这里插入图片描述

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

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

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

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

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

# 查找目标元素Text&#xff0c;先找App &#xff0c;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、滑动查找元素

格式如下&#xff1a;

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


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • IneedtofocusTextCellsonebyoneviaabuttonclick.ItriedlistView.ScrollTo.我需要通过点击按钮逐个关注Tex ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
author-avatar
情非不得以1_810
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有