Web元素定位方法_8大元素+xpath定位


元素定位,顧名思義就是根據元素的特征,來確認元素的條件,然后根據條件去找到唯一的那個元素。

一、八大元素

1、只根據元素的一個屬性來找元素(6大)

1)id、name、class_name(只支持一個class值)、tag_name 

2)只針對a元素

link_text、partial_link_text

示例:

 

 1 # class - 只能是class屬性當中的一個值
 2 driver.find_element_by_class_name("s_ipt")   # 1個元素 - 匹配到的第1個元素
 3 driver.find_elements_by_class_name("s_ipt")   # 所有匹配多個元素 - 列表
 4 
 5 # name
 6 driver.find_element_by_name("wd")
 7 driver.find_elements_by_name("wd")
 8 #
 9 #  tag
10 driver.find_element_by_tag_name("input")
11 driver.find_elements_by_tag_name("input")
12 #
13 #  link_text
14 driver.find_element_by_link_text("地圖")
15 driver.find_elements_by_link_text("地圖")
16 #
17 # # partial_link_text
18 driver.find_element_by_partial_link_text("hao")
19 driver.find_elements_by_partial_link_text("hao")

 

2、多個屬性組合來找元素或者通過其它的關系來找元素(2大)-

1)絕對定位: 以/開頭, 父/子

根據繼承順序、同級位置順序一層一層的找,與在windows文件目錄,需要一層一層的打開找到對應的文件(逐層打開)。

示例:

/html/body/div[2]/div[3]/div/div/div[2]/div[3]/i[1]

/*[@id="number-attend"]/div[2]/div[3]/i[1]

//div[@id="number-attend"]//i[@class="ing

2)相對定位(Xpath定位):靠自己的特征來定位,自己唯一的標識,以//開頭

 

二、Xpath定位

(在當前需定位的頁面按F12下elements當中,按Ctrl +F,彈出表達式確認框)

1、根據元素的唯一屬性(標識來定位)

表達式格式://標簽名[@屬性=值]

示例://i[@class="ing"]

//*[@*="ing"]

2、文本匹配

表達式格式://標簽名[text()=值]

示例://a[text()="公告"]

3、包含

表達式格式://標簽名[contains(@屬性/text(),值)]

示例://a[contains(@href,"/Notify/index/courseid/")]

//a[contains(text(),"公告")]

4、輯運算 來組合更多的元素特征。 and or

表達式格式:

1)//標簽名[@屬性=值 and @屬性=值 and contains(@屬性/text(),值) and text()=值]
2)//標簽名[@屬性=值 or @屬性=值]

示例://a[text()="公告" and contains(@href,"/Notify/index/courseid/")]

5、層級定位://一級元素//二級元素//......

示例://div[@id="number-attend"]//i[@class="ing"]

6、軸定位: 關系 - 分析元素之間的關系,頁面的結構。

1)通過兄弟姐妹找到自己

2)通過后代元素來找到 祖先元素

軸運算:

ancestor:祖先結點 包括父

parent:父結點 給g

preceding: 當前元素節點標簽之前的所有結點。(html頁面先后順序)

preceding-sibling: 當前元素節點標簽之前的所有兄弟結點

following: 當前元素節點標簽之后的所有結點。(html頁面先后順序)

following-sibling:當前元素節點標簽之后的所有兄弟結點

使用語法:

已知的元素/軸名稱::標簽名稱[@屬性=值]

例://div//table//td//preceding::td

//p[@title="余糧"]/preceding-sibling::p[@class="stuno"]

//p[@title=”余糧"]/parent::*/following-sibling::li//p[@class="name"]

1 # 直接寫By,按Alt+Enter進行導入即可
2 from selenium.webdriver.common.by import By
3 element = driver.find_element(By.XPATH,'//p[@title="余糧"]/preceding-sibling::p[@class="stuno"]')
4 element_list = driver.find_elements(By.XPATH,'//p[@title="余糧"]/preceding-sibling::p[@class="stuno"]')

 


免責聲明!

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



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