selenium4自動(dòng)化測(cè)試八大定位高級(jí)用法
? ? ? ? Selenium提供了8種不同的定位方法,分別通過id、name、xpath、class name、tag name、link_text、partial link text及css selector進(jìn)行定位。在Selenium4.0版本中,定位方法find_element_by_xx被丟棄,采用find_element()方法。具體的使用細(xì)節(jié)將在本節(jié)中詳細(xì)介紹。
id定位
HTML Tag的id屬性值是唯一的,故不存在根據(jù)id定位多個(gè)元素的情況。以“l(fā)ogin.html”頁面用戶名輸入“大牛測(cè)試”為例。用戶名 id屬性值為“dntest”,如下圖1-1所示:

“find_element”方法來定位用戶名文本框,需傳入兩個(gè)參數(shù),By.ID即通過ID定位元素,另一個(gè)參數(shù)為id值,代碼如下:
name 定位
上圖1-1所示,其name屬性值為“daniu”,方法By.NAME表示通過name來定位,代碼如下:
class定位
以login.html密碼框?yàn)槔?,如圖1-1所示,其class屬性值為“passwd”,在“find_element”方法中參數(shù)使用By.CLASS_NAME,另一參數(shù)為“passwd”,代碼如下:
注意:上例中,用戶名也有class屬性“f-text phone-input”,因有空格不能直接使用,可以取部分f-text或phone-input進(jìn)行定位,代碼如下:
link_text定位
? ? ? ?link_text是以超鏈接全部名字作為關(guān)鍵字來定位元素的。以login.html頁面“上傳資料頁面”超鏈接為例如圖1-2所示?:

代碼如下:
partial_link_text定位
? ? ? 即用超鏈接文字的部分文本來定位元素,類似數(shù)據(jù)庫的模糊查詢。以“上傳資料頁面”超鏈接為例,取“上傳資料”便可執(zhí)行,即取超鏈接全部文本的一個(gè)子集。代碼如下:
css定位
CSS定位的優(yōu)點(diǎn)是速度快、語法簡潔。圖1-3中的內(nèi)容出自W3School的CSS參考手冊(cè)。CSS定位的選擇器有十幾種,在本節(jié)中主要介紹幾種比較常用的選擇器

以class選擇器為例,實(shí)現(xiàn)用戶名框輸入“大牛測(cè)試”,代碼如下:
由上可知id定位語法結(jié)構(gòu)為:#加id名。實(shí)現(xiàn)在用戶名框輸入“大牛測(cè)試”,代碼如下:
通過常規(guī)的標(biāo)簽名稱來定位,如用戶名框標(biāo)簽為“input”,在標(biāo)簽內(nèi)部又設(shè)置了屬性值為“name=’wd’”,測(cè)試代碼如下。
xpath 定位
1.XPath簡介
XPath是XML Path語言的縮寫,是一種用來確定XML文檔中某部分位置的語言。它在XML文檔中通過元素名和屬性進(jìn)行搜索,主要用途是在XML文檔中尋找節(jié)點(diǎn)。XPath定位比CSS定位有更大的靈活性。XPath可以向前搜索也可以向后搜索,而CSS定位只能向前搜索,但是XPath定位的速度比CSS慢一些。
XPath語言包含根節(jié)點(diǎn)、元素、屬性、文本、處理指令、命名空間等。以下文本為XML實(shí)例文檔,用于演示XML的各種節(jié)點(diǎn)類型,便于理解XPath。
其中<animalList>為文檔節(jié)點(diǎn),也是根節(jié)點(diǎn);<name>為元素節(jié)點(diǎn);type=“mammal”為屬性節(jié)點(diǎn)。
節(jié)點(diǎn)之間的關(guān)系:
父節(jié)點(diǎn)。每個(gè)元素都有一個(gè)父節(jié)點(diǎn),如上面的XML示例中,animal元素是name、size,以及action元素的父節(jié)點(diǎn)。
子節(jié)點(diǎn)。與父節(jié)點(diǎn)相反,這里不再贅述。
兄弟節(jié)點(diǎn),有些也叫同胞節(jié)點(diǎn)。它表示擁有相同父節(jié)點(diǎn)的節(jié)點(diǎn)。如上代碼所示,name、size和action元素都是同胞節(jié)點(diǎn)。
先輩節(jié)點(diǎn)。它是指某節(jié)點(diǎn)的父節(jié)點(diǎn),或者父節(jié)點(diǎn)的父節(jié)點(diǎn),以此類推。如上代碼所示,name元素節(jié)點(diǎn)的先輩節(jié)點(diǎn)有animal和animalList。
后代節(jié)點(diǎn)。它表示某節(jié)點(diǎn)的子節(jié)點(diǎn)、子節(jié)點(diǎn)的子節(jié)點(diǎn),以此類推。如上代碼所示,animalList元素節(jié)點(diǎn)的后代節(jié)點(diǎn)有animal、name等。
2.XPath語法
XPath來自于XML,又由于HTML語言的語法和XML比較接近,故XPath也支持定位HTML頁面元素。下面以login.html登錄為例,采用絕對(duì)路徑與相對(duì)路徑演示。網(wǎng)頁元素如圖1-4所示

(1) 絕對(duì)路徑即完整的路徑,如login.html頁面登錄框,絕對(duì)路徑為“html/body/form/input[1]”,完整代碼如下:
(2) 相對(duì)路徑方式,以相對(duì)路徑 以//開頭,從任何元素節(jié)點(diǎn)解析,“*”號(hào)表示通配符皮匹配任何元素節(jié)點(diǎn),“.”為選取當(dāng)前節(jié)點(diǎn),“..” 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn),實(shí)現(xiàn)在login.html頁面登錄框輸入“測(cè)試”,代碼如下
除以上常規(guī)方法定位,部分復(fù)雜控件需要采用模糊定位,用 starts-with與contains
starat-with以某個(gè)屬性值開始,如login.html用戶名為例,id為dntest,可取部分id如dnt代碼如下:
contains包含某個(gè)屬性值,如login.html用戶名為例,可取部分id如nte,代碼如下:
tag_name定位
tag_name定位即通過標(biāo)簽名稱定位,常用于復(fù)合定位,如圖1-5所示,定位標(biāo)簽“form”并打印標(biāo)簽屬性值“name”。
