xpath定位方法


xpath方法

絕對路徑表示法:

  從根節點(html)開始,路徑分割符是/(斜杠,類似於linux中路徑分割符)
  如:/html/body/div/span
  表示對應路徑下的span元素

相對路徑表示法:

  以//開頭后面加元素名稱, 用法類似於css中的后代選擇器,可以把//對應css中空格
  如://span
  表示html文檔下所有的span元素
  如://div//span
  表示方法類似於CSS中的 div span

屬性選擇器:

  //*[@屬性] 表示選擇具有某個屬性的元素
  //*[@屬性=”屬性值“] 表示選擇具有某個屬性值的元素,屬性值必須加引號(單引號雙引號都可以)
  //*[@style] 選擇所有具有style屬性的元素
  //p[@spec='len2'] 選擇所有具有spec 值為 len2 的元素
  Tips:在xpath中沒有表示id和class的特殊方法,id 、class 也是屬性
  根據部分屬性選擇元素的方法:
    //*[contains(@屬性,”value“)] 表示屬性包含value 例子//*[contains(@id,'food')]
    //*[starts-with(@屬性,”value“)] 表示屬性以value開頭 例子://*[starts-with(@id,'choose_')]
    //a[ends-with(@href,'51job.com')] 表示屬性href以51job.com結尾(目前瀏覽器還不支持這種表示方法)
    使用text()函數匹配元素文本://a[text()="高級搜索"]

子元素選擇器:

  1、通過下標方式獲取,下標從1開始 
("//*[@id='food']/p[1]") # 獲取id為food下p元素中的第一個 ("//*[@id='food']/*[1]") # 獲取id為food下所有元素中的第一個
  2、倒數索引:
    使用last()可以計數,代表最大數量   
//*[@id='food']/span[last()] 獲取id為food下span元素中的最后一個 //*[@id='food']/span[last()-1] 獲取id為food下span元素中的倒數第二個 //*[@id='food']/*[last()] 獲取id為food下所有元素中的倒數第一個
  3、position()用法:
//*[@id='food']/p[position()=1] 獲取id為food下p元素中的第一個 //*[@id='food']/*[position()=2] 獲取id為food下所有元素中的第二個 //*[@id='food']/*[position()=last()] 獲取id為food下所有元素中的最后一個
 

組選擇器:xpath中 用豎線來隔開 //p | //button 等價於css中的 p, button

相鄰兄弟選擇器:

  向后查找
    獲取id為food下第一個span元素的相鄰span元素,可以是多個,指定下標為1,最近的一個 last()最遠的一個
    //*[@id='food']/span[1]/following-sibling::span
  向前查找
     //*[@id='food']/preceding-sibling::div[1] 指定下標1代表離的最近

父元素選擇器:

  使用場景:通常你想定位的元素沒有特征,只有他的子節點有id這種特征
  
    <select id="choose_car"> <option value="volvo">沃爾沃</option> <option value="corolla">卡羅拉</option> <option value="fiat">菲亞特</option> <option value="audi">奧迪</option> </select>
 
  //*[@value='volvo']/.. 定位到屬性value的值為volvo的父元素也就是id="choose_car">的select
  然后依次類推,還可以獲取父元素的父元素
相對定位法:
   food = driver.find_element_by_id("food")
   vegetable = food.find_element_by_xpath('./p[2]')
   如果我想獲取的是food這個元素范圍內的呢,大家就要在這個表達式前面加一個點,這個點表示在當前的元素范圍內。
例子:
<div id="food" style="margin-top:10px"> <span class="vegetable good">黃瓜</span>所有元素第一個 <span class="meat">牛肉</span> <p class="vegetable">黃瓜pp</p> p元素第一個 <p class="vegetable">青菜</p> </div>

 

driver = webdriver.Chrome()
driver.get('file:///C:/Users/Administrator/Desktop/lesson_code/autoUI_selenium/lesson05/s1.html')
# 獲取id為food下p元素中的第一個
ele = driver.find_element_by_xpath("//*[@id='food']/p[1]")
print(ele.text) #黃瓜pp
# 獲取id為food下所有元素中的第一個
ele2 = driver.find_element_by_xpath("//*[@id='food']/*[1]")
print(ele2.text) #黃瓜
# 獲取id為food下span元素中的最后一個
ele3 = driver.find_element_by_xpath("//*[@id='food']/span[last()]")
print(ele3.text) #牛肉
# 獲取id為food下span元素中的倒數第二個
ele4 = driver.find_element_by_xpath("//*[@id='food']/span[last()-1]")
print(ele4.text) #黃瓜
# 獲取id為food下所有元素中的倒數第一個
ele5 = driver.find_element_by_xpath("//*[@id='food']/*[last()]")
print(ele5.text) #青菜
# 獲取id為food下p元素中的第一個
ele6 = driver.find_element_by_xpath("//*[@id='food']/p[position()=1]")
print(ele6.text) #黃瓜pp
# 獲取id為food下所有元素中的第二個
ele7 = driver.find_element_by_xpath("//*[@id='food']/*[position()=2]")
print(ele7.text) #牛肉
# 獲取id為food下所有元素中的最后一個
ele8 = driver.find_element_by_xpath("//*[@id='food']/*[position()=last()]")
print(ele8.text) #青菜
# 獲取id為food下第一個span元素的相鄰span元素,可以是多個,指定下標為1,最近的一個 last()最遠的一個
ele9 = driver.find_element_by_xpath("//*[@id='food']/span[1]/following-sibling::span[1]")
print(ele9.text) #牛肉

food = driver.find_element_by_id("food")
vegetable = food.find_element_by_xpath('./p[2]')
print(vegetable.text) #青菜
driver.quit()

 


免責聲明!

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



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