XP定位(APP元素定位)
Appium app自动化测试经验分享-Xpath定位总结
在我看来,自动化测试中元素定位的倚天剑和屠龙刀莫过于 Xpath和CSS,但CSS只用于Web(之前已经分享过),这次就分享下Xpath的定位方法。本期讲的是Xpath定位运用到App。
一)Xpath定位
XPath即为XML Path 的简称,它是一种用来确定XML文档中某部分位置的语言。
XML:一种标记语言,用于数据的存储和传递。 后缀.xml结尾
提示:Xpath为强大的语言,那是因为它有非常灵活定位策略;
二)Xpath定位实战
以下所有用例所用app是夜神模拟器,实际操作:点击设置-点击更多。

1.根据 元素属性名和属性值 来定位
依据:元素属性名和值
格式:(假设都可以唯一定位某元素)
//*[@resource-id=“XXXX”]
//*[@text=“XXXX”]
//*[@content-desc=“XXXX”]
"""xpath 根据元素属性名和属性值来定位"""
self.xin_find_element(By.XPATH, '//*[@text="通讯录"]').click() # text属性值是通讯录 可以唯一定位
self.xin_find_element(By.XPATH, '//*[@resource-id="com.tencent.mm:id/ik"]').click() # resource-id属性值是com.tencent.mm:id/ik 不唯一,但是此元素处于第一个
ele= driver.find_element_by_xpath('//*[@content-desc="搜索"]')
# a1=driver.find_element_by_xpath("//*[@text='更多']")
# a2=driver.find_element_by_xpath("//*[@resource-id = 'com.android.settings:id/title']")
#点击
ele.click()
2.根据 标签 + 元素属性名和值 组合定位
依据:class + 元素属性名和值
格式:(假设都可以唯一定位某元素)
//class[@resource-id=“XXXX”]
//class[@text=“XXXX”]
//class[@content-desc=“XXXX”]
def test_xpath_03b(self):
""" 标签 + 元素属性名和值"""
self.xpath_find_element('//android.widget.TextView[@text="通讯录"]').click()
self.xpath_find_element('//android.view.View[@text="微信团队"]').click()
- 1
- 2
- 3
- 4
def test_xpath_03c(self):
""" 标签 + 元素属性名和值"""
self.xpath_find_element('//android.widget.TextView[@text="通讯录"]').click()
self.xpath_find_element('//android.view.View[@content-desc="微信团队"]').click()
- 1
- 2
- 3
- 4
如果同样的属性值定位多个元素elements,可以加上索引来定位: driver.find_element_by_xpath(’(//android.view.View[@content-desc=“详情”])[1]’).click()
3.根据 层级关系+索引 来定位
层级关系 主要是 父定位子,爷爷定位孙子
格式://*[@attribute=‘XXXX’]/class
索引:同类class排序,从1开始
def test_xpath_04(self):
"""层级关系、索引"""
self.xpath_find_element('//android.widget.LinearLayout/android.widget.RelativeLayout[2]/android.widget.LinearLayout[@resource-id="com.tencent.mm:id/bwj"]/android.widget.TextView').click()
self.xpath_find_element('//android.widget.RelativeLayout[@resource-id="com.tencent.mm:id/ih"]/android.view.View').click() # 父类的id定位并非唯一,但是父类位于第一个
- 1
- 2
- 3
- 4
def test_xpath_04b(self):
"""层级关系、索引"""
self.xpath_find_element('//android.widget.LinearLayout/android.widget.RelativeLayout[2]').click()
self.xpath_find_element('//android.widget.ListView[@resource-id="com.tencent.mm:id/i2"]/android.widget.LinearLayout[2]/android.widget.LinearLayout').click()
- 1
- 2
- 3
- 4
def test_xpath_04c(self):
"""层级关系、索引"""
self.xpath_find_element('//android.widget.LinearLayout[@resource-id="com.tencent.mm:id/bwj"]/android.widget.TextView[@text="通讯录"]').click()
self.xpath_find_element('//android.widget.LinearLayout/android.widget.RelativeLayout/android.view.View[@text="微信团队"]').click()
- 1
- 2
- 3
- 4
4.根据 兄弟节点 来定位
兄弟节点 主要在子定位父
格式:
// *[ @ resource - id = “resource-id属性值”] /…/ class1
// *[ @ resource - id = “resource-id属性值”] / parent::class/class1
可以无限 子定位父
def test_xpath_05(self):
"""兄弟节点"""
self.xpath_find_element('//android.widget.RelativeLayout/../android.widget.TextView[@text="通讯录"]').click()
self.xpath_find_element('//android.widget.TextView[@text="W"]/parent::*/android.widget.LinearLayout').click()
- 1
- 2
- 3
- 4
def test_xpath_05b(self):
"""兄弟节点"""
self.xpath_find_element('//com.tencent.mm.ui.mogic.WxViewPager[@resource-id="com.tencent.mm:id/auh"]/parent::android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.RelativeLayout[2]').click()
self.xpath_find_element('//android.view.View[@resource-id="com.tencent.mm:id/i5"]/parent::android.widget.RelativeLayout/parent::android.widget.FrameLayout/android.widget.ListView/android.widget.LinearLayout[2]/android.widget.LinearLayout').click()
- 1
- 2
- 3
- 4
5. 根据 逻辑运算 and or not 组合定位
格式: //*[@attribute1=‘XXXX’ and @attribute2=‘XXXXXX’]
def test_xpath_06(self):
"""逻辑运算 and or not """
self.xpath_find_element('//*[@text="通讯录" and @class="android.widget.TextView"]').click()
self.xpath_find_element('//*[@text="微信团队" and @resource-id="com.tencent.mm:id/ik"]').click()
- 1
- 2
- 3
- 4
def test_xpath_06b(self):
"""逻辑运算 and or not """
self.xpath_find_element('//*[@text="通讯录" and @resource-id="com.tencent.mm:id/bwm"]').click() # and 用于多个元素可以唯一定位的时候
self.xpath_find_element('//*[@text="微信团队" or @content-desc="微信团队"]').click() # or 用于多个元素都可以唯一定位 的时候
- 1
- 2
- 3
- 4
6.根据 模糊定位contains、starts-with
格式:
//*[contains(@attribute,‘XXXX’)]
//*[starts-with(@attribute,“XXXX”)]
def test_xpath_07(self):
"""模糊匹配 contains"""
self.xpath_find_element('//*[contains(@text,"讯")]').click()
self.xpath_find_element('//*[contains(@text,"团队")]').click()
- 1
- 2
- 3
- 4
def test_xpath_07b(self):
"""模糊匹配 contains"""
self.xpath_find_element('//*[contains(@text,"录")]').click()
self.xpath_find_element('//*[contains(@content-desc,"微信")]').click()
- 1
- 2
- 3
- 4
def test_xpath_07c(self):
"""模糊匹配 contains"""
self.xpath_find_element('//*[contains(@text,"通讯")]').click()
self.xpath_find_element('//*[contains(@content-desc,"信团")]').click()
- 1
- 2
- 3
- 4
def test_xpath_08(self):
"""模糊匹配 starts-with"""
self.xpath_find_element('//*[starts-with(@text,"通讯")]').click()
self.xpath_find_element('//*[starts-with(@text,"微信")]').click()
- 1
- 2
- 3
- 4
def test_xpath_08b(self):
"""模糊匹配 starts-with"""
self.xpath_find_element('//*[starts-with(@text,"通讯")]').click()
self.xpath_find_element('//*[starts-with(@content-desc,"微信")]').click()
- 1
- 2
- 3
- 4
这些都是自己整理、全部测试通过得,写这些xpath一般不太费力气;就是层级关系那儿真的是辛苦,来回绕来绕去得很麻烦。明天分享Xpath定位运用到Web。
XP定位(APP元素定位)的更多相关文章
- App元素定位
1.元素定位(采用Appium-desktop自带的工具) 1.1将初始化参数复制进去校验json格式正确且保存后,点击start session 初始化参数来源如下: # 定义启动设备需要的参数 d ...
- App元素定位三种方法
来自博客: http://testingpai.com/article/1595507262082 以下方法操作前必须确保有手机设备连入电脑,检测是否有手机连入命令 adb devices 第一种:A ...
- APP元素定位和操作
webdriver 提供了八种元素定位方法: 在 Python 语言中对应的定位方法如下:find_element_by_id()find_element_by_name()find_element_ ...
- APP元素定位工具weditor
github地址https://github.com/openatx/weditor python -m weditor --shortcut adb devices 在页面上输入手机设备号,点Con ...
- uiautomatorviewer定位App元素
这个工具是Android SDK自带的, 日常的工作中经常要使用的, 在C:\Android\sdk\tools\bin目录下: 双击之, 请注意, 我一般选择第一个机器人小图标Device Scre ...
- Appium中app的元素定位
app定位方式,本文只讲Android手机的定位方式. 前提条件是adb连接到模拟器或者是手机(具体连接方式这里不再讲解),证明已连接到设备 adb devices app元素定位工具一:UI Aut ...
- App自动化《元素定位方式、元素操作、混合应用、分层设计、代码方式执行Pytest 命令》
坚持原创输出,点击蓝字关注我吧 作者:清菡 博客:oschina.云+社区.知乎等各大平台都有. 目录 一.App 元素定位方式 二.元素操作 三.测试混合应用 四.以代码的方式执行 Pytest 命 ...
- Appium+python自动化-元素定位uiautomatorviewer的使用
前言 环境搭建好了,下一步元素定位,元素定位本篇主要介绍如何使用uiautomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作. uiautomatorviewer是androi ...
- Web自动化必会知识:「Web基础、元素定位、元素操作、Selenium运行原理、项目实战+框架」
1.web 基础-html.dom 对象.js 基本语法 Dom 对象里面涉及元素定位以及对元素的修改.因为对元素操作当中涉及的一些 js 操作,js 基本语法要会用.得要掌握前端的基本用法.为什么要 ...
随机推荐
- localhost和127.0.0.0
,网络通信知识. 127.0.0.1是环回地址,只有本机可以访问 0.0.0.0是本机地址,内网外网均可以访问 localhost是本机域名,只有本机可以访问 ip是分五类
- Bing Advanced Search Tricks You Should Know
Bing is one of the world's most popular search engines that has gained many fans with its ease of us ...
- LookupError: "gw_lt" is not among the defined enum values
LookupError: "XXX" is not among the defined enum value 查找错误:“xxx”不在定义的枚举值中 model.py中没有增加对应 ...
- php 的定界符 <<<eof 的问题
PHP是一个Web编程语言,在编程过程中难免会遇到用echo来输出大段的html和javascript脚本的情况,如果用传统的输出方法 ——按字符串输出的话,肯定要有大量的转义符来对字符串中的引号等特 ...
- MySQL replace into 与insert into
https://blog.csdn.net/helloxiaozhe/article/details/77427266 使用replace带来的问题 1.Replace into 操作在唯一键重复情况 ...
- PowerShell 远程执行命令
PowerShell 远程执行命令 最近在做一些自动化的测试工作,在代码实现的过程中需要远程启动/关闭一些服务或者测试机. 我首先想到的是建立一个website,通过网站对一些服务进行操作,但是这样感 ...
- [功能集锦] 002 - mysql查询数据库字典+导出+样式一键整合至excel
写在前面: 因为工作时候经常遇到半路接手项目的情况,由于年代久远,数据库字典这块经常缺失.故写此篇,以便复用,也希望对大家有点帮助. 随笔内容不高级,如有不妥,不吝指正. 20190730-加了一些简 ...
- webpack2.0 基本使用
webpack是一款前端模块打包工具, 它的出现是由于现代web开发越来越复杂,如果还是像原来那样把所有的js代码都写到一个文件中,维护非常困难.而解决复杂化的方法通常是分而治之,就是把复杂化的东西进 ...
- Android超简单气泡效果
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680最近有用到水下气泡上升效果,因此在网上查了一下资料,结果还真找到了 ...
- pjhp实现使用redis来存储session数据
#设置php处理session的方式为redis,并配置redis的访问地址(因为在redis中绑定的访问地址为127.0.0.1,所以就没有设置访问密码,如果需要请自行搜索)#因为不想修改php.i ...