(selenium+python)_UI自動化02_元素定位

前言

selenium元素定位分爲兩大模塊,單數定位和複數定位。單數定位定位到的是某個具體的元素,複數定位定位到的是具有相同屬性的一組元素。這裏講解下python中selenium庫的元素定位方法。

前提-打開瀏覽器開發者模式

定位元素前需先打開瀏覽器開發者模式,查看頁面源碼

例:chrome瀏覽器

windows:快捷鍵F12

Mac ios :快捷鍵option+command+i

單數定位

單數定位,即定位單個元素。selenium單數定位方法有八種,如下:

1,根據元素id、class、name屬性定位

1 driver.find_element_by_id("J_searchbg") #根據id定位上圖搜索框-推薦詞
2 driver.find_element_by_class_name("search_bg") #根據class定位上圖搜索框-推薦詞
3 driver.find_element_by_name("name屬性值") #根據元素name屬性定位

2,定位文本超鏈接

文本超鏈接定位分爲兩種:精確匹配和模糊匹配

精確匹配:匹配相同目標文本的超鏈接 

driver.find_element_by_link_text("我的訂單") #定位文本爲"我的訂單"的文本超鏈接

模糊匹配:匹配包含目標文本的超鏈接

driver.find_element_by_partial_link_text("訂單") #定位文本包含"訂單"的文本超鏈接

3,根據元素標籤定位

HTML源碼中有多個<div>、<a>、<input>。。。等標籤,可根據標籤來定位元素,但是同一個頁面有很多相同標籤導致無法確定元素唯一性,很難確定到具體的元素,該方法使用較少。

driver.find_element_by_tag_name("input") #定位input標籤

4,根據xpath路徑定位

XPath 即爲 XML 路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言。

基本語法

詳細語法可參考:https://www.w3school.com.cn/xpath/xpath_syntax.asp

備註:層級之間"/"隔開

實例一

1 search_xpath = '//div[@id="J_searchbg"]'
2 
3 driver.find_element_by_xpath(search_xpath) # 使用xpath定位,上圖搜索-推薦詞

備註:字符串引號需單雙結合,單引號中嵌套雙引號,或者雙引號中嵌套單引號。

實例二:定位屬性不唯一的元素

某元素屬性頁面存在多個時,可根據屬性索引查找元素

driver.find_element_by_xpath('//*[@id="navitems-group1"]/li[1]/a[1]') # 查找秒殺菜單

注意:xpath索引下角標從1開始

實例三:層級定位

兄弟關係定位

從上圖中可見,搜索推薦詞和搜索btn在同一個class="form"的div下,故搜索btn爲搜索推薦詞的兄弟元素,定位如下

driver.find_element_by_xpath('//div[@id="J_searchbg"]/../button')  #定義搜索推薦詞的兄弟元素搜索按鈕

爺孫關係定位

driver.find_element_by_xpath('//*[@class="fr"]//a[@class="link-login"]')  #定義class="fr"的<div>元素的孫子元素<a>(class="link-login")

實例四:文本定位

1 #精確匹配
2 driver.find_element_by_xpath('//*[text()="我的訂單"]')  # 定位text="我的訂單"的所有元素
3 
4 #模糊匹配
5 driver.find_element_by_xpath('//*[contains(text(),"訂單")]')  # 定位text包含"訂單"的所有元素

5,根據css查找元素定位

css selector即css選擇器,可以選擇HTML或者XML中的元素

基本語法 

備註:層級之間使用">"隔開

詳細語法可參考:https://www.w3school.com.cn/cssref/css_selectors.ASP

實例一

driver.find_elements_by_css_selector("#J_searchbg") # 使用css selector定位,上圖搜索-推薦詞

實例二:定位屬性不唯一的元素

driver.find_elements_by_css_selector('#div[id="navitems-group1"]>li[1]>a[1]') # 使用css selector定位,上圖-秒殺菜單

注意:css selector索引下角標從1開始

複數定位

複數定位,是指定位具有相同屬性的一組元素。selenium複數定位,也是八種定位方法,和單數定位一樣只是element是複數形式elements,如下:

上圖中複數八種定位方法的使用和單數定位是一樣的,這裏不展示詳細說明,具體使用參考可單數定位。

當頁面有多個相同屬性的元素時,可使用複數定位,例:
 

1 jingdong_menu = driver.find_elements_by_class_name("navitems-lk") #京東-菜單欄,所有菜單具有相同屬性,故可使用複數定位所有菜單
2 
3 jingdong_menu[0].click() #點擊第一個菜單-秒殺,根據索引值獲取對應元素

元素常用操作

點擊元素:click()

輸入文本:send_keys("文本")

清空:clear()

例:

1 driver.find_element_by_id("J_searchbg").click()  # 點擊京東-搜索框
2 driver.find_element_by_id("J_searchbg").send_keys("洗衣機")  # 京東-搜索框,輸入“洗衣機”
3 driver.find_element_by_id("J_searchbg").clear()  # 京東-搜索框,清空內容
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章