做的笔记比较乱,定位过程中,发现很多开发小哥的代码命名问题,怕被怼,这里说说算了。

恩。。这是我最常用,也是最熟悉的定位方法之一,这次趁着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)
8、爷爷定位孙子

通过层级关系,一层一层的往下找,可以通过爷爷元素,定位到孙子元素

# 爷爷定位孙子
# 爷爷元素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

声明:本文为博主学习感悟总结,水平有限,如果不当,欢迎指正。如果您认为还不错,欢迎转载。转载与引用请注明作者及出处。

最新文章

  1. Bulk Insert:将文本数据(csv和txt)导入到数据库中
  2. UML大战需求分析——阅读笔记06
  3. 【原创】使用Fiddler抓取手机网络包
  4. ComponentOne Studio for Enterprise 2015 v1 全新发布
  5. [转]SVN-版本控制软件
  6. 安装完Oracle之后的注意事项
  7. PC/UVa 题号: 110105/10267 Graphical Editor (图形化编辑器)题解
  8. openStack 性能开测
  9. Spring MVC(二)
  10. YYLabel 自动布局 富文本文字点击事件
  11. Less变量
  12. 使用EndNote在Word中插入参考文献的格式设置
  13. Vue-表单输入绑定
  14. HBase RowKey与索引设计
  15. 简单两步 ~ 绕过 "Paused in debugger"
  16. 学习windows编程 day3 之滚动条完善
  17. AD中常用的命令
  18. python-day9-集合数据类型
  19. 使用文本用户界面(NMTUI)进行网络配置
  20. [小技巧]diff的文件夹忽略使用方式

热门文章

  1. 结构体&文件
  2. 框架 get 请求乱码
  3. 刷题记录:[CISCN2019 总决赛 Day2 Web1]Easyweb
  4. Django入门——《Python编程从入门到实践》
  5. 第06组 Alpha冲刺(6/6)
  6. 第09组 Alpha冲刺(3/4)
  7. GIT生成SSH-KEY公钥放到服务器免密登录
  8. B2C电子商务系统研发——商品SKU分析和设计(一)
  9. Centos7安装Redis5.0.5并加入Systemd服务
  10. [转]CSS3 使用 calc() 计算高度 vh px