Selenium之用xpath定位元素
selenium中有8種方式可以定位元素,分別為:ID、XPATH、LINK_TEXT、PARTIAL_LINK_TEXT、NAME、TAG_NAME、CLASS_NAME、CSS_SELECTOR,本文記錄XPATH的使用方法。
根據路徑選擇
絕對路徑
從根路徑即html開始一層一層的往下找,即絕對路徑。例如百度首頁的按鈕:
/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input
相對路徑
即相對於其他路徑而寫的xpath。例如id為form的元素下的所有span子元素:
//*[@id="form"]/span
根據屬性選擇
常用屬性有class、name、text
表示式 | 說明 |
//span[@class='tools'] |
class等於tools的span元素。(注意:是等於!) |
//div[contains(@class,"submit")] | class包含submit的div元素。(注意:是包含!) |
//a[contains(text(),'取消')] | 文字內容包含"取消"的a元素 |
//input[@name='mobile'] | name等於mobile的input元素 |
//input[@name="item"][not(@disabled)]/.. | name等於item且沒有disabled屬性的input元素的父元素 |
//*[@type='hidden'] |
type屬性等於hidden所有元素。(注意萬用字元*) |
//input[@formcontrolname="username"] | formcontrolname屬性等於username的input |
...... |
...... |
*只要是有的屬性都可以,不一定是要自己見過的;
*可以寫多個屬性,表示都需要滿足;
*用xpath可以實現所有情況的定位啊,超好用;
根據第幾個來選擇
根據找到的元素本身取,用(xpath)[1]
比如部落格園的登入頁面,根據xpath //div[@class="mat-tab-label-content"]可以定位到兩個元素,“密碼登入”和“簡訊登入”;若只想取第一個,即密碼登入,則用 (
背景顏色:#FFEFD5
組選擇、父節點、兄弟節點
組選擇
加上符號 | 即可。例如要選擇所有的p元素和h4元素:
//p | //h4
父節點
某個元素的父節點用 /.. 來選擇。例如要選擇百度首頁id為su的元素的父節點:
//*[@id='su']/..
上上級父節點可以加多個/..,例如://*[@id='su']/../..
兄弟節點
選擇後續的兄弟節點,可以使用:following-sibling::
1、後續所有兄弟節點:
//*[@name='ie']/following-sibling::*
2、後續的所有兄弟節點中的span元素:
//*[@name='ie']/following-sibling::span
3、後續的所有兄弟節點中的span元素且span元素的class包含bg:
//*[@name='ie']/following-sibling::span[contains(@class,'bg')]
選擇前面的兄弟節點,可以使用:preceding-sibling::
例如://input[@name='f']/preceding-sibling::*
End.