Appium之xpath定位

xpath定位是一种路径定位方式,主要是依赖于元素绝对路径或者相关属性来定位,但是绝对路径xpath执行效率比较低(特别是元素路径比较深的时候),一般使用比较少。通常使用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='XXX']")

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

 第一种: //class属性 

# 定位搜索框 //class属性
driver.find_element_by_xpath("//android.widget.EditText")

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

# 定位搜索框  //*[@class='class属性']
driver.find_element_by_xpath("//*[@class='android.widget.EditText']")

组合定位

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

 

# id和class属性
id_class = '//android.widget.EditText[@resource-id="XXX"]'


# text和index属性 
desc_class = '//*[@text="文本" and @index="1"]'


# class和text属性 
class_text = '//android.widget.EditText[@text="文本"]'

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

 

层级定位

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

 

#通过父亲定位儿子  搜索输入框
a = '//*[@resoure-id="XXX"]/android.widget.EditText'

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

# 父元素下第2个儿子,注意下标从1开始
task=(By.XPATH,"//*[@resource-id='com.itc.tourismaudiomanager:id/rv_custom_layout']/androidx.cardview.widget.CardView[2]")
self.driver.find_element(*self.task).click()

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

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

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

 

本文转载自https://www.cnblogs.com/cnkemi/p/9180525.html

 

posted @ 2021-11-25 17:34  CNF油条  阅读(262)  评论(0)    收藏  举报