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
浙公网安备 33010602011771号