Appium_Xpath定位详解
做的笔记比较乱,定位过程中,发现很多开发小哥的代码命名问题,怕被怼,这里说说算了。
恩。。这是我最常用,也是最熟悉的定位方法之一,这次趁着UI交换变更的机会,整理一下Xpath的定位方法,喜欢可以收藏!
1、根据元素的属性 text、resource-id 、class、 content-desc属性定位
# text定位 1.可以通过text文本定位到
# driver.find_element_by_xpath("//*[@text='天猫国际']") # resource-id定位 2.如果元素id是唯一的,xpath也可以定位id属性
# 扫一扫
driver.find_element_by_xpath("//*[@resource-id='com.taobao.taobao:id/bar_search']")
time.sleep(4)
driver.back() # class定位 3.class属性唯一的话,可以通过class属性定位到,定位class属性有两种方法
driver.find_element_by_xpath("//android.widget.EditText").click()
time.sleep(4)
driver.back()
driver.find_element_by_xpath("//*[@class='android.widget.EditText']").click() # text定位
time.sleep(5)
driver.back()
driver.find_element_by_xpath("//*[@text='注册/登录']").click()
time.sleep(5)
# content-desc 4.定位content-des属性
driver.find_element_by_xpath("//*[@content-desc='帮助']").click()
2、contains模糊定位
.contains是模糊匹配的定位方法,对于一个元素的id或者text不是固定的,但有一部分是固定的,这种就可以模糊匹配
contains定位在定位一组元素的时候,效率尤其突出
# 模糊匹配
driver.find_element_by_xpath("//*[contains(@resource-id, 'bar_search')]").click()
time.sleep(5)
driver.back()
# widget.EditText 搜索
driver.find_element_by_xpath("//*[contains(@class, 'widget.TextView')]").click()
time.sleep(5)
driver.back()
# text 的 contains
driver.find_element_by_xpath("//*[contains(@text, '注册/登录')]").click()
time.sleep(5)
driver.find_element_by_xpath("//*[contains(@text, '帮助')]").click()
3、匹配多个定位元素
# 匹配多个
duoge = driver.find_elements_by_xpath("//android.widget.TextView") # 返回是个list
print("获取元素个数: %s" % len(duoge))
for i in duoge:
print(i.text)
4、组合定位
如果一个元素有2个属性,通过xpath也可以同时匹配2个属性,text, resource-id,class,index,content-desc这些属性都能任意组合定位
# 通过2个属性组合定位
# id+class 淘宝搜索框
driver.find_element_by_xpath("//android.widget.EditText[@resource-id='com.taobao.taobao:id/home_searchedit']") # text+class 淘宝全部分类
driver.find_element_by_xpath("//*[@text='分类' and @class='android.widget.TextView']") # id+desc 淘宝扫一扫
driver.find_element_by_xpath("//*[@resource-id='com.taobao.taobao:id/home_searchedit' and @content-desc='扫一扫']")
5、or 或者 and
# or 或者 and
x = "//*[@text='' or @class='']"
els = driver.find_elements_by_xpath(x) # 一般定位一组元素用到
for i in els:
print(i.els)
6、层级定位-父子定位
知道父亲元素,也可以定位到子元素
# 父亲定位儿子 搜索框输入
# 有多个相同标签儿子,可以通过下标取值(xpath语法是从1开始数)
driver.find_element_by_xpath('//android.webkit.WebView[@content-desc="安全验证"]/android.view.View[4]')

有多个相同标签儿子,可以通过下标取值(xpath语法是从1开始数)
7、儿子定位父亲

# 儿子定位父亲
sun_fa1 = '//*[@resource-id="com.taobao.taobao:id/tv_scan_text"]/..'
c = driver.find_element_by_xpath(sun_fa1).tag_name
print(c) # 方法二 parent::*
sun_fa2 = '//*[@resource-id="com.taobao.taobao:id/tv_scan_text"]/parent::*'
d = driver.find_element_by_xpath(sun_fa1).tag_name
print(d) # 方法三 parent::android.widget.LinearLayout
sun_fa3 = '//*[@resource-id="com.taobao.taobao:id/tv_scan_text"]/parent::android.widget.LinearLayout'
e = driver.find_element_by_xpath(sun_fa1).tag_name
print(e)
通过层级关系,一层一层的往下找,可以通过爷爷元素,定位到孙子元素

# 爷爷定位孙子
# 爷爷元素FrameLayout---第一个FrameLayout儿子---孙子TextView
x = '//android.widget.FrameLayout/android.widget.LinearLayout[1]/android.widget.TextView'
t = driver.find_elements_by_xpath(x)
print(len(t))
# 打印文本信息
print(t[0].text)
作者:含笑半步颠√
博客链接:https://www.cnblogs.com/lixy-88428977
声明:本文为博主学习感悟总结,水平有限,如果不当,欢迎指正。如果您认为还不错,欢迎转载。转载与引用请注明作者及出处。
Appium_Xpath定位详解的更多相关文章
- 小甲鱼PE详解之基址重定位详解(PE详解10)
今天有一个朋友发短消息问我说“老师,为什么PE的格式要讲的这么这么细,这可不是一般的系哦”.其实之所以将PE结构放在解密系列继基础篇之后讲并且尽可能细致的讲,不是因为小甲鱼没事找事做,主要原因是因为P ...
- 带你走进CSS定位详解
学习CSS相关知识,定位是其中的重点,也是难点之一,如果不了解css定位有时候都不知道怎么用,下面整理了一下关于定位属性的具体理解和应用方案. 一:定位 定位属性列表 position top bot ...
- iOS 后台持续定位详解(支持ISO9.0以上)
iOS 后台持续定位详解(支持ISO9.0以上) #import <CoreLocation/CoreLocation.h>并实现CLLocationManagerDelegate 代理, ...
- selenium:css_selector定位详解
selenium:css_selector定位详解(css selector和xpath的比较) 来源:https://www.cnblogs.com/haifeima/p/10138154.html ...
- 多测师讲解自动化测试 _RF课堂_定位详解(002上午)_高级讲师肖sir
1,打开克览器 2.id定位 Input Text id=kw 我是id定位 #id定位方法 3.name定位 Input Text name=wd 我是name定位方法 #我是name定位方法 4. ...
- CSS进阶内容—浮动和定位详解
CSS进阶内容-浮动和定位详解 我们在学习了CSS的基本知识和盒子之后,就该了解一下网页的整体构成了 当然如果没有学习之前的知识,可以到我的主页中查看之前的文章:秋落雨微凉 - 博客园 CSS的三种布 ...
- CSS魔法堂:Position定位详解
一.Position各属性值详解 1. static :默认值,元素将按照正常文档流规则排列. 2. relative :相对定位,元素仍然处于正常文档流当中,但可以通过left.top. ...
- selenium By 元素定位详解
转自:http://blog.sina.com.cn/s/blog_6966650401012a6u.html WebDriver拾级而上·之三 定位页面元素 selenium-webdriver提供 ...
- UI自动化测试(二)浏览器操作及对元素的定位方法(xpath定位和css定位详解)
Selenium下的Webdriver工具支持FireFox(geckodriver). IE(InternetExplorerDriver).Chrome(ChromeDriver). Opera( ...
随机推荐
- updateprimarykey 和updateprimaryKeySelective
updateprimarykey 会对左右的字段都进行更新,updateprimaryKeySelective 只会对不为null的字段进行更新..所以在填表的web项目需要注意这个两个方法的选择,因 ...
- mark_rabbitMQ
一.1.6 和1.7的区别 二.63跟65好像有点差异 有些jar包问题 三.预取策略 https://blog.csdn.net/hry2015/article/details/79078312 四 ...
- 使用RestTemplate请求报出HttpClientErrorException异常并获取不到返回body数据
描述: 使用RestTemplate请求url,由于Token等验证信息参数失效,报出 401 HttpClientErrorException异常.并且获取不到body消息体的错误信息.然而post ...
- koa2 get post api restful前端联调
1.git https://github.com/MengFangui/koa2-restful-api 2.示例代码 //引入 Koa 服务器 const koa = require('koa'); ...
- Tensorflow r1.12及tensorflow serving r1.12 GPU版本编译遇到的问题
1.git clone tensorflow serving 及tensorflow代码 2. ERROR: /root/.cache/bazel/_bazel_root/f71d782da17fd8 ...
- cat命令创建文件
看例子是最快的熟悉方法: # cat << EOF > test.sh > #!/bin/bash #“shell脚本” > #you Shell script writ ...
- Laravel 入门常见问题汇总
一.安装完成后想打开 Laravel 内置的登录页面,报错 解决方法: Laravel 利用 PHP5.4 的新特性 trait 内置了非常完善好用的简单用户登录注册功能,适合一些不需要复杂用户权限管 ...
- OpenGL基础汇总
OpenGL(应用程序接口 即API)——用于访问图形硬件的可编程特性 1. 各种矩阵: 世界矩阵(World Matrix):世界矩阵确定一个统一的世界坐标,用于组织独立的物体形成一个完整的场景; ...
- Servlet2.5版本和Servlet3.0版本
在学习这节之前你需要在你自己的电脑进行如下配置: 配置Java运行环境:JDK+JRE的安装配置,参考博客Windows下配置Java开发环境: 安装Eclipse:参考博客Windows下配置Jav ...
- Swift编码总结4
1.swift @discardableResult 声明: swift正常的方法如果有返回值的话,调用的时候必须有一个接收方,否则的话编译器会报一个警告,如果在方法前加上 @discardableR ...