Appium_Xpath定位詳解


做的筆記比較亂,定位過程中,發現很多開發小哥的代碼命名問題,怕被懟,這里說說算了。

恩。。這是我最常用,也是最熟悉的定位方法之一,這次趁着UI交換變更的機會,整理一下Xpath的定位方法,喜歡可以收藏!

 

1、根據元素的屬性 textresource-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

聲明:本文為博主學習感悟總結,水平有限,如果不當,歡迎指正。如果您認為還不錯,歡迎轉載。轉載與引用請注明作者及出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM