Appium 的xpath定位

1.如果元素text是唯一的,可以通过text文本定位

//*[@text=’text文本属性’]

# 定位text

driver.find_element_by_xpath("//*[@text='扫一扫']").click()

2.如果元素id是唯一的,也可以id属性定位

//*[@resource-id=’id属性’]

# 定位 resource-id

driver.find_element_by_xpath("//*[@resource-id='com.taobao.taobao:id/tv_scan_text']").click()

同样可以联合上面两种方式定位,如下

# 也可以联合@resource-id属性和@text文本属性来下定位

driver.find_element_by_xpth("//*[@resource-id='com.taobao.taobao:id/tv_scan_text'][@text='扫一扫']").click()

3.class属性唯一的话,同样可以通过class属性定位,有两种方法

第一种: //class属性

# 定位搜索框 //class属性

driver.find_element_by_xpath("//android.widget.EditText").click()

第二种: //*[@class=’class属性’]

# 定位搜索框  //*[@class='class属性']

driver.find_element_by_xpath("//*[@class='android.widget.EditText']").click()

4.通过content-desc属性定位

//*[@content-desc=’desc的文本’]

#点登录/注册
driver.find_element_by_xpath("//*[@text='注册/登录']").click()
time.sleep(3)
#content-desc定位
driver.find_element_by_xpath("//*[@content-desc='帮助']").click()

contains模糊定位

1)、contains是模糊匹配的定位方法,对于一个元素的id或者text不是固定的,但有一部分是固定的,这种就可以模糊匹配。

//[contains(@content-desc, ‘帮助’)]

# contains匹配text
driver.find_element_by_xpath('//*[contains(@text, "注册/登录")]').click()
time.sleep(3)
# contains匹配textcontent-desc
driver.find_element_by_xpath("//*[contains(@content-desc, '帮助')]").click()

2)、contains也能模糊匹配id和class属性

//[contains(@resource-id, ‘id属性’)]

//[contains(@clsss, ‘class属性’)]

#定位搜索框class
driver.find_element_by_xpath("//*[contains(@class, 'EditText')]").click()
time.sleep(3)
driver.back()
#定位id
driver.find_element_by_xpath("//*[contains(@resource-id, 'id/home_searchedit')]").click()

组合定位

1)、如果一个元素有2个属性,通过xpath也可以同时匹配2个属性,text, resource-id,class ,index,content-desc这些属性都能任意组合定位

# id和class属性   定位搜索框

id_class = '//android.widget.EditText[@resource-id="com.taobao.taobao:id/home_searchedit"]'

driver.find_element_by_xpath(id_class).click()

time.sleep(3)

driver.back()

# text和index属性  定位登录/注册

desc_class = '//*[@text="注册/登录" and @index="1"]'

driver.find_element_by_xpath(desc_class).click()

time.sleep(3)

# class和text属性  定位输入手机号

class_text = '//android.widget.EditText[@text="请输入手机号码"]'

driver.find_element_by_xpath(class_text).send_keys("512200893")

time.sleep(3)

# class和desc  定位帮助

id_desc = '//*[contains(@resource-id, "aliuser_menu_item_help") and @content-desc="帮助"]'

driver.find_element_by_xpath(id_desc).click()

层级定位

1)、如果一个元素,它除了class属性(class属性肯定会有),其它属性啥都没有,这种情况用上面方法就不适用了,这个时候可以找他父元素,通过父亲定位儿子

#通过父亲定位儿子  搜索输入框

fa_sun = '//*[@resoure-id="com.taobao.taobao:id/home_searchbar"]/android.widget.EditText'

t = driver.find_element_by_xpath(fa_sun).text

print(t)

如果一个父元素下,有多个相同class的儿子时候,可以通过xpath的索引去取对应第几个,xpath是从1开始数的

# 父元素下第2个儿子 微淘

fu_sun2 = '//*[@resource-id="com.taobao.taobao:id/ll_navigation_tab_layout"]/android.widget.FrameLayout[2]'

driver.find_element_by_xpath(fu_sun2).click()

2)、相反的,可以通过儿子定位父亲

# 通过子元素定位父元素

# 方法一: ..

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)

3)、通过子元素,先找到父元素,再找父元素下的子元素,同样可以进行兄弟元素定位

# 兄弟元素

xiongdi = '//*[@resource-id="com.taobao.taobao:id/bar_search"]/../android.widget.RelativeLayout'

x = driver.find_element_by_xpath(xiongdi).tag_name

print(x)

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

#爷爷元素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/cnkemi/p/9180525.html,本想自己重新做,但是原文跟我想的一样。在此非常感谢原文分享作者。

Appium 的xpath定位的更多相关文章

  1. appium的xpath定位

    做自动化,元素定位是我们遇到的第一个困难.总是会有各种各样的问题,导致我们定位不到元素.前面一篇博客也写了元素定位的几种方法,今天主要分享一下xpath的定位方法. 这里我们仍然拿计算器举例. 比如我 ...

  2. Appium之xpath定位元素

    原文:http://www.cnblogs.com/cnkemi/p/9180525.html appium也是以webdriver为基的,对于元素的定位也基本一致,只是增加一些更适合移动平台的独特方 ...

  3. Appium之xpath定位详解

    前面也说过appium也是以webdriver为基的,对于元素的定位也基本一致,只是增加一些更适合移动平台的独特方式,下面将着重介绍xpath方法,这应该是UI层元素定位最强大的方法啦! 以淘宝app ...

  4. Appium Android 元素定位方法 原生+H5

    APPIUM Android 定位方式   1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouce-id: 代码可以这样写: WebElement eleme ...

  5. 【appium】根据xpath定位元素

    1. 背景 本文尝试使用的试验对象是SDK自带的NotePad应用实例,假设已经有两个Notes分别是“note1”和“note2”添加到Notepad上面,我们要做的就是尝试用xpath的方法来定位 ...

  6. appium 3-4-1034等待、日志、性能数据、xpath定位、web driver协议

    1.等待 1.1精确等待 sleep 不推荐 @Test public void testWait1() throws InterruptedException{ day_time(); Thread ...

  7. 四:RF框架appium工具之xpath定位

    XPATH定位方法具体的学会,还是在今年1月份,以前运用的都不熟练. 这个定位神器是一定要掌握的,不然有你抓狂的时候. 第一要掌握它的书写格式,这个好上手. 第二要掌握它的具体用法.这个就要多练习了, ...

  8. 初探appium之元素定位(1)

    无论是selenium还是appium,元素定位都是我们开始实现自动化面临的第一个问题.selenium还好,我们可以在浏览器的调试页面进行元素定位还是蛮方便的.那么appium怎么做呢? 我看到很多 ...

  9. 让新版appium支持by_name定位

    org.openqa.selenium.InvalidSelectorException: Locator Strategy 'name' is not supported for this sess ...

随机推荐

  1. iOS开发——高级篇——Runtime实际应用

    前言 本篇主要介绍Runtime在开发中的一些使用场景,顺便讲解了下MJExtension的底层实现 一.runtime简介 RunTime简称运行时.OC就是运行时机制,也就是在运行时候的一些机制, ...

  2. sql compare options

    sql compare project's options Add object existence checks Use DROP and CREATE instead of ALTER Ignor ...

  3. C# WINFORM 窗体执行ORACLE存储过程 进行增删改查 自己编写借助网络(二)

    窗体界面: 下面是项目二的代码 本代码我是留着备份学习的 以供参考: 存储过程: 存储过程: 插入数据:CREATE OR REPLACE Procedure p_insert_t_cls --存储过 ...

  4. 【OI新闻】2016.10.09

    号外: [头条]今天OI神犇光勋和原子城po ke,Happy Birthday!

  5. MongoDB全文搜索——目前尚不支持针对特定field的搜索

    > db.articles.createIndex( { subject: "text" } ) { "createdCollectionAutomatically ...

  6. android删除短信

    代码如下: //删除短信 getContentResolver().delete(Uri.parse("content://sms/#"),"address=?" ...

  7. 4.8 Using Ambiguous Grammars

    4.8 Using Ambiguous Grammars It is a fact that every ambiguous grammar fails to be LR and thus is no ...

  8. python-----写入txt用法

    代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/1/14 11:23 # @Author : zxb file_p ...

  9. 远程报错:这可能是由于credssp加密oracle修正

  10. Linux 系统命令 - pwd - 显示当前所在的位置

    命令详解 重要星级: ★★★★★ 功能说明: pwd命令是 "print working directory" 中每个单词的首字母缩写,其功能是显示当前工作目录的绝对路径.在实际工 ...