四 八大元素定位

2022-07-15 08:00:12 字數 4437 閱讀 7965

一、八大元素定位

idname

class_name

tag_name

link_text

partial_link_text

xpath

css_selector

1)id元素定位

from selenium import

webdriver

driver =webdriver.chrome()

driver.get(

"")#得到的返回值是乙個webelement的python物件==》元素

input_elem = driver.find_element_by_id("kw"

)print

(input_elem)

#獲取屬性==》webelement()

print(input_elem.get_attribute("

name"))

#在python中不能直接修改元素,selenium沒有封裝對應的方法

2)find_element 和 find_elements乙個查詢乙個,乙個是查詢多個

前面得到的是乙個webelement物件,後面得到的是乙個列表

沒有該定位時,前者報錯nosuchelementexception,後者返回空列表

#

判斷元素是否存在

ifnot driver.find_elements_by_id("

kwkw"):

print("

該元素不存在")

else

:

print("

該元素存在

")

3)name屬性定位

#

name屬性

driver.find_element_by_name("wd"

)driver.find_elements_by_name("wd

")

4)class_name屬性

driver.find_element_by_class_name("

s_ipt")

driver.find_elements_by_class_name(

"s_ipt

")

5)link_text 通過超連結的全部文字

e=driver.find_element_by_link_text("新聞"

)e.click()

6)partial_link_text 通過超連結的部分文字

e=driver.find_element_by_partial_link_text("聞"

)e.click()

7)tag_name屬性 (定位元素太多,測試時不用,爬蟲的時候用)

driver.find_element_by_tag_name("

input

")

用的最多的是id name class_name

二、元素定位之入坑指南

1)雖然id是唯一的,但是有些網頁id是變化的

2)不要用可能會動態變化的屬性進行元素定位

--不規則的字串,一般會比較長

--純數字 ,22,53,23

--帶數字的,a2,kw1,kw3

3)class_name值中間不能有空格(如class=" bg s_ipt_wr quickdelete-wrap")

4)如何確定我的元素表示式只能找到乙個元素

--複製表示式到瀏覽器,ctrl+f

--find_elements只有乙個元素 

以上六種定位元素(通過單屬性定位,只能定位特徵明顯的元素)

find_element_by_id / by_name / by_tag_name / by class_name等都是在find_element()方法的基礎上,進行二次封裝的。其本質都是使用的find_element()方法,進行元素定位的。(可檢視find_element原始碼)

driver.find_element("id","kw")    ==  driver.find_element_by_id("kw")

三、xpath--組合多個特徵,組合多個屬性--

xpath:即xml路徑語言(xml path language),用來確定xml文件中某部分位置的語言

1)獲取xpath的表示式

2)絕對定位 相對定位

/:絕對路徑(從最開始的地方一層一層進入對應的元素,冗餘,容錯性差)

//:相對路徑(已經在某個位置了,更加簡潔,容錯性更強)

在自動化測試當中,我們使用相對路徑,不用絕對路徑

3)xpath表示式

組合多個條件://*[@id="kw" and @name="wd" and @class="s_ipt"]

通過xpath定位新聞

e= driver.find_element("

xpath

","//a[text()='新聞']

") #

text不是屬性,前面不加@

通過xpath contains 定位新聞

e =driver.find_element("

xpath

","//a[contains(text(),'新聞')]")

e.click()

#

通過祖先和父親查詢

'''//span[@id = 's_kw_wrap']/input[@clas='s_ipt']

'''#

通過子元素找父元素,使用/..,不能跨級查詢

'''' //input[@clas='s_ipt']/../..

'''#

特殊手段1(通過索引,索引是從1開始的)

'''//input[1]

(//input)[1] 加了括號提高了優先順序

'''

4)軸定位

哥哥、姐姐==preceding-sibling

弟弟、妹妹==following-sibling

祖先==ancestor (找到比他輩分大的直系,爺爺的同級不會顯示) 

如:通過input找同級span(同級哥哥)

//input[@id="

kw"]//preceding-sibling::span

通過input找同級a標籤(同級弟弟)

//input[@id="

kw"]//following-sibling::a

input輸入框的祖先

//input[@id="

kw"]//ancestor::span

四、css選擇器.s_ipt       class_name = s_ipt

#kw         id = kw

(.表示class   #表示id)

css選擇器:input[id=kw]  ===>xpath表示式: //input[@id="kw"]

css查詢的單向性---只能通過父元素找子元素

五、xpath和css

--css的好處1:表示式方式更加簡潔

--css的好處2:主流瀏覽器,查詢速度快

--xpath的好處2:支援text文字定位,css不支援

--xpath的好處3:對於一些複雜元素,xpath寫法反而要簡潔

selenium 8大元素定位方法

一 8大元素定位方法 根據id定位 find element id id名稱 或 find element by.id,id名稱 根據標籤的name屬性定位 find element name name名稱 或 find element by.name,name名稱 前提是匯入by類 from se...

元素的八大定位方式

八大定位方式 from selenium import webdriver def browseropen driver webdriver.chrome driver.maximize window driver.get return driver def positioning input ty...

CSS三大元素

塊級元素有 內聯 行內 元素有 無法設定寬高,元素大小隨內容變化,所有元素預設在一行,撐滿自動換行,支援左右margin和padding,不支援上下margin,上下的padding不佔位置,但是會把背景顏色或者邊框撐開。內聯 行內 塊級元素有 既能設定寬高大小,又能排在一行顯示,在和上下之間會有一...