首页 网站首页 商业信息 定位 查看内容

技术分享 | app自动化测试(Android)–高级定位技巧

杭州共生网络 2023-4-20 22:28 6594人围观 定位

XPath高级定位技能
XPath 简介
XPath 的英文全称为:XML Path Language,意旨对 XML 中的元素停止途径定位的一种说话,它可适用 XML 标志说话,Html 标志说话,APP Dom 结构。XPath 是自动化工具的定位根本,可适用于 Selenium 工具,Appium 工具,Appcrawler 工具。由于前面章节已经对 XPath 停止说明,本篇只做举例说明。
XPath 根基语法
下面是 XPath 的常用方式:




XPath 模糊定位技能
contains( )方式是模糊婚配的定位方式,对于一个元素的属性不牢固,便可以模糊婚配。如://[contains(@content-desc, ‘帮助’)],示例代码:
PYTHON 版本
driver.find_element(By.XPATH, '//*[contains(@text, "注册")]') driver.find_element(By.XPATH, '//*[contains(@content-desc, "搜索")]') driver.find_element(By.XPATH, '//*[contains(@resource-id, "login_phone")]')
JAVA 版本
driver.findElement(By.xpath( "//*[contains(@text, \"注册\")]")); driver.findElement(By.xpath( "//*[contains(@content-desc, \"搜索\")]")); driver.findElement(By.xpath( "//*[contains(@resource-id, \"login_phone\")]"));
XPath 组合定位技能
经过 XPath 可以同时婚配 2 个甚最多个属性来完成元素定位。这里常用的属性有 text、resource-id、class、index、content-desc 等,这些属性肆意组合完成定位,示例代码:
PYTHON 版本
driver.find_element( By.XPATH,'//*[@text="我的" and @resource-id="tab_name"]' ).click() driver.find_element( By.XPATH,'//*[@text="注册/登录" and @index="1"]' ).click()
JAVA 版本
driver.findElement(By.xpath( "//*[@text=\"我的\" and @resource-id=\"tab_name\"]")).click(); driver.findElement(By.xpath( "//*[@text=\"注册/登录\" and @index=\"1\"]")).click();
XPath 层级定位
凡是定位元素的时辰能够会触及到经过子元素去定位父元素,大概父元素定位子元素,大概定位兄弟元素,xpath 支持父子关系,兄弟关系元素的查找。示例代码以下:
PYTHON 版本
# 经过子元素定位父元素 # 方式一:.. driver.find_element_by_xpath( '//*[@text="手机号"]/..').tag_name # 方式二 parent::* driver.find_element_by_xpath( '[@text="手机号"]/parent::*').tag_name #经过元素定位兄弟元素 driver.find_element_by_xpath( '//*[@text="手机号"]/../li' ).tag_name
JAVA 版本
// 经过子元素定位父元素 // 方式一:.. driver.findElement(By.xpath( "//*[@text=\"手机号\"]/..")).getTagName(); // 方式二 parent::* driver.findElement(By.xpath( "[@text=\"手机号\"]/parent::*")).getTagName(); // 经过元素定位兄弟元素 driver.findElement(By.xpath( "//*[@text=\"手机号\"]/../li" )).getTagName();
案例
场景一:
利用:雪球 apk
可以利用 uiautomatorviewer 工具停止 dom 分析,然后对分析到的元素停止 XPath 定位,比以下面的搜索框,可以利用元素的多种属性停止定位,常用的有 text,resource-id,class,content-desc 等属性。



1080×575 214 KB

保举利用 resource-id 停止定位,凡是情况下,它是页面唯一的属性,其 XPath 以下:
PYTHON 版本
driver.find_element( By.XPATh, '//*[contains(@resource-id, "tv_search")]') # 大概也可写成下面这样 driver.find_element(By.ID, 'tv_search')
JAVA 版本
driver.findElement(By.xpath("//*[contains(@resource-id, \"tv_search\")]")); // 大概也可写成下面这样 driver.findElement(By.id("tv_search"));
场景二:
以下图,获得 “BABA” 所对应的股票价格 “187.11”,可以利用 XPath 父子关系来停止元素定



1080×545 215 KB

代码以下:
PYTHON 版本
curr_price = self.driver.find_element( MobileBy.XPATH,"//*[@text='BABA']/../../..\ //*[@resource-id='com.xueqiu.android:id/current_price']")
JAVA 版本
MobileElement curr_price = driver.findElement( By.xpath("//*[@text=\"BABA\"]/../../..//\ *[@resource-id='com.xueqiu.android:id/current_price']"));
Android UiAutomator定位技能
UiAutomator 是 Android SDK 自带的一个测试框架,这个测试框架供给了一系列的 API,可以与 Android APP 停止交互,例如翻开菜单,点击,滑动等。当 Appium 的 Caps 参数 uiautomationName 设备为 UiAutomator2 时,就可以实现与手机真个 UiAutomator 停止通讯而且利用 UiAutomator 履行测试代码。假如不停止设备,默许也是利用 UiAutomator2 工作引擎。UiAutomator1 是较老的工作引擎,假如想测试较老版本的 Android 系统(低于 Android4.4 版本)需要设备 uiautomationName=“UiAutomator1”。
由于 Android UiAutomator 是 Android SDK 中自带的工作引擎,利用这类定位方式,速度上要比 Xpath 定位方式快很多。但由于写法比力特别,调试起来要相对麻烦,假如定位语句编写不妥,剧本编辑器也不会给出任何提醒信息。只能在运转的时辰校验对错。
下面就零丁先容基于 uiautomator 定位元素的方式,根基语法以下:

  • Python 版本

driver.find_element_by_android_uiautomator()

  • Java 版本

driver.findElement(MobileBy.AndroidUIAutomator());
常用的方式有:
UiSelector() # 实现元素定位 UiScrollable() # 实现转动查找元素
经过 TEXT 文本定位
UiSelector( ) 与 XPath 类似,可以经过元素的 text 属性来定位元素。语法格式以下:
new UiSelector().text("text文本")
一样也能用模糊查询的用法去定位元素
例如: new UiSelector().textContains(“手机”) 示例代码:

  • Python 版本

driver.find_element_by_android_uiautomator( 'new UiSelector().textContains("手机")').click()

  • Java 版本

driver.findElementByAndroidUIAutomator(\ "new UiSelector().textContains(\"手机\")").click();
经过 RESOURCEID 定位
uiautomator 一样也能停止 id 定位,格式为 new UiSelector().resourceId(“resource-id属性”),示例代码:

  • Python 版本

driver.find_element_by_android_uiautomator( 'new UiSelector().resourceId("rl_login_phone")').click()

  • Java 版本

driver.findElementByAndroidUIAutomator("new UiSelector().\ resourceId(\"rl_login_phone\")").click();
经过 CLASSNAME 定位
页面上的 class 属性一般不唯一,此时可以按照下标停止定位,格式为 new UiSelector().className(“className”),一般会利用find_elements完成定位,示例代码:

  • Python 版本

driver.find_elements_by_android_uiautomator( 'new UiSelector().\ className("android.widget.TextView")')[5].click()

  • Java 版本

driver.findElementsByAndroidUIAutomator("new UiSelector().\ className(\"android.widget.TextView\")")[5].click();
经过 DESCRIPTION 定位
一样的,也支持 contenet-desc 定位方式,格式为:new UiSelector().description(“contenet-des属性”),示例代码:

  • Python 版本

driver.find_element_by_android_uiautomator( 'new UiSelector().description("搜索")').click()

  • Java 版本

driver.findElementByAndroidUIAutomator("new \ UiSelector().description(\"搜索\")").click();
组合定位方式
Uiautomator 也支持组合元素查找功用,示例代码:

  • Python 版本

driver.find_element_by_android_uiautomator( 'new UiSelector().resourceId(\ "com.xueqiu.android:id/tv_login_phone").text("手机号")').click()

  • Java 版本

driver.findElementByAndroidUIAutomator("new UiSelector().resourceId(\ \"com.xueqiu.android:id/tv_login_phone\").text(\"手机号\")").click();
转动查找元素
Uiautomator 利用 UiScrollable() 实现了转动查找元素的功用,可以指定滑动到某个元素,示例代码:

  • Python 版本

driver.find_element_by_android_uiautomator( 'new UiScrollable(new UiSelector().scrollable(true)\ .instance(0)).scrollIntoView(new UiSelector()\ .text("我的").instance(0));').click()

  • Java 版本

driver.findElementByAndroidUIAutomator(\ "new UiScrollable(new UiSelector().scrollable(true)\ .instance(0)).scrollIntoView(new UiSelector().\ text(\"我的\").instance(0));").click();
上面的代码,在当前的页面转动的查找 text 文本是“我的”这个元素,找到以后履行点击操纵。
css selector元素定位
Appium Server 从 1.19.0 这个版本起头,元素定位增加了 css selector 的支持。appium-uiautomator2-driver 会将 css selector 定位器转化成 android uiautomator 定位方式。
留意:appium inspector 临时没有增加这类定位方式。
由于 UiSelector() 的表达式是 Java 的语法格式,编写定位元素的表达式很复杂,代码编写工具(比如 Pycharm,VSCode,IntelliJ IDEA等)也不会有任何提醒毛病信息。只能是运转时才能发现表达式的毛病。官方供给了 css selector 的语法,会自动转成 android uiautomator 的语法结构,这类原生的定位元素的方式,定位速度要更快一些。
详情参考官方:https://github.com/appium/appium-uiautomator2-driver/pull/410
源码地址:https://github.com/appium/appium-uiautomator2-driver/blob/master/lib/css-converter.js
id 定位
可以利用 css selector 语法定位。以下代码,#igk 暗示 css selector 定位符

  • Python 版本

driver.find_element_by_css_selector('#igk')
对应 ID 定位器代码以下:
driver.find_element_by_id('android:id/igk')

  • Java 版本

driver.findElementByCssSelector("#igk").click();
对应 ID 定位器代码以下:
driver.findElementById("android:id/igk").click();
class name 定位
以下代码,暗示 css selector 定位符为 .android.widget.ImageView 的元素

  • Python 版本

driver.find_element_by_css_selector('.android.widget.ImageView')
对应 class name 定位器代码以下:
driver.find_element_by_class_name("android.widget.ImageView")

  • Java 版本

driver.findElementByCssSelector(".android.widget.ImageView");
对应 class name 定位器代码以下:
driver.findElementByClassName("android.widget.ImageView");
text 定位
以下代码,暗示 css selector 定位符为 *[text=‘工作台’]" 的元素:

  • Python 版本

driver.find_element_by_css_selector("*[text='工作台']")
对应 xpath 定位器代码以下:
driver.find_element_by_xpath("//*[@text='工作台']")

  • Java 版本

driver.findElementByCssSelector("*[text=\"工作台\"]");
对应 xpath 定位器代码以下:
driver.findElementByXPath("//*[@text=\"工作台\"]");
description 定位
以下代码,暗示 css selector 定位符为 *[description=“ContentDescription”] 的元素:

  • Python 版本

driver.find_element_by_css_selector('*[description="ContentDescription"]')
对应 accessibility id 定位器代码以下:
driver.find_element_by_accessibility_id("ContentDescription")

  • Java 版本

driver.findElementByCssSelector("*[description=\"ContentDescription\"]");
对应 accessibility id 定位器代码以下:
driver.findElementByAccessibilityId("ContentDescription");



高端人脉微信群

高端人脉微信群

人脉=钱脉,我们相信天下没有聚不拢的人脉,扫码进群找到你所需的人脉,对接你所需的资源。

商业合作微信

商业合作微信

本站创始人微信,13年互联网营销经验,擅长引流裂变、商业模式、私域流量,高端人脉资源丰富。

精彩点评

相关推荐

1元开通测试!华为“高精度定位”功能上线

1元开通测试!华为“高精度定位”功能上线

11月29日,华为系列手机把鸿蒙系统更新到最新版本后,取消了“辅助定位设置”的选项,

定位理论5大坑,你踩过几个?

定位理论5大坑,你踩过几个?

编辑导语:有些“定位方法论”充分利用了读者的“简化冲动”,可能我们在市面上接受到

一篇文章,读懂定位理论 | 到底什么是定位?

一篇文章,读懂定位理论 | 到底什么是定位?

定位二字,不断出现在各类圈层的朋友口中。可这个词到底是什么意思,或许没有太多人会

教你如何使用Ip地址进行精准定位

教你如何使用Ip地址进行精准定位

首先,看到这个标题,很多人可能没由的一楞,Ip地址?地位?Ip地址怎么定位?是的,没

安卓Android手机如何利用软件修改系统定位

安卓Android手机如何利用软件修改系统定位

工具/原料:1、Fake Location APPFake Location APP功能介绍:1.以ROOT环境运行,不易

虚拟定位/ Fake Location

虚拟定位/ Fake Location

某东有时候会联合发些地域性的消费券,像什么“云南消费券”、“东莞消费券”,app定

老司机揭秘手机定位技术,这下彻底明白啦!

老司机揭秘手机定位技术,这下彻底明白啦!

今天我们所处的移动互联网时代,手机成了每个人的生活标配。这些手机里,安装了形形色

原神:太香了!水神少女形象定位曝光,海灯节全新角色登场 ...

原神:太香了!水神少女形象定位曝光,海灯节全新角色登场 ...

果然是亲女儿,每次复刻的武器池都香到让人流口水​。​有点小失望,绫华皮肤竟然是四

定位凉凉了?定位为什么会定死?

定位凉凉了?定位为什么会定死?

定位凉凉了?定位为什么会定死?作者/李兴随着当今营销生态的变化,品牌呈现出全新的

百度地图宣布切换为优先运用国产北斗系统进行定位

百度地图宣布切换为优先运用国产北斗系统进行定位

IT之家 9 月 30 日消息,近日,百度地图发布了北斗卫星导航系统应用的最新进展,北斗

有什么好用的手机号码定位APP推荐吗?

有什么好用的手机号码定位APP推荐吗?

常有不少杠精说位置定位类APP打着亲情的招牌,实际上在侵犯个人隐私。但是,工具本身

手机关机拔卡仍可定位,大数据行程卡,揭开信息无处遁形的面纱

手机关机拔卡仍可定位,大数据行程卡,揭开信息无处遁形的面纱

你相信吗?将手机关机拔卡之后依旧可以定位,它就是一个隐形的GPS定位工具,放在以前

用手机就能知道你的位置,摄像头也能带定位功能,偷听偷窥神器网络热销

用手机就能知道你的位置,摄像头也能带定位功能,偷听偷窥神器网

楚天都市报11月14日讯(记者 周丹)近日,“有人利用软件通过手机非法定位他人位置”

手机号怎么定位对方在哪?分享个手机定位找人小窍门,误差仅10米

手机号怎么定位对方在哪?分享个手机定位找人小窍门,误差仅10米

生活中,有很多时候都会用到手机定位找人这种找人的方法,那么,手机号怎么定位对方在

华为上线高精度定位服务!收费仅需1元,为何网友还说不厚道?

华为上线高精度定位服务!收费仅需1元,为何网友还说不厚道?

近日,有媒体报道称,华为在会员服务中心中新增了一项全新的功能——“高精度定位”,

手机定位很简单,一张微信照片就能定位对方的位置,真的涨知识了

手机定位很简单,一张微信照片就能定位对方的位置,真的涨知识了

在日常生活中,相信有不少的朋友时时刻刻想要知道自己的另一半去了哪里?可是,自己又

这可能是把产品定位讲得最透彻的一篇文章了

这可能是把产品定位讲得最透彻的一篇文章了

产品定位,归根到底是用户定位、场景定位、价值定位、价格定位4大块。想要一款产品最

品牌定位,抢占用户心智第一步

品牌定位,抢占用户心智第一步

为了更好地经营品牌,以及更好地瞄准目标群体、向用户传递品牌价值,品牌需要做好自身

谈谈华杉对定位理解的5个误区

谈谈华杉对定位理解的5个误区

编辑导语:前几天,华与华董事长华杉围绕《定位》这本书,提出了对定位理论的5个质疑

如何做好个人定位?

如何做好个人定位?

随着粉丝经济的增长,越来越多人意识到个人IP的高价值,很多人开始有打造个人品牌的意

商业洽谈 文章投递 寻求报道
电话咨询: 15924191378
关注微信