定位css 和xpath

推薦的定位方式的優(yōu)先級

優(yōu)先級最高:ID

優(yōu)先級其次:name

優(yōu)先級再次:CSS selector

優(yōu)先級再次:Xpath



針對css selector和xpath的優(yōu)先級做一個簡單的說明

在項目中我們可能用的最多的是css或者xpath,那么針對這兩種,我們優(yōu)先選擇css,原因在哪些?

原因1:css是配合html來工作,它實現(xiàn)的原理是匹配對象的原理,而xpath是配合xml工作的,它實現(xiàn)的原理是遍歷的原理,所以兩者在設(shè)計上,css性能更優(yōu)秀

原因2:語言簡潔,明了,相對xpath

原因3:前段開發(fā)主要是使用css,不使用xpath,所以在技術(shù)上面,我們可以獲得幫助的機會非常多



1.xpath選擇元素

/ 表示直接子節(jié)點

//所有的子節(jié)點

//li[@text()=‘文本內(nèi)容’] ?通過文本內(nèi)容查找元素

//div[@id='hello']/../p ? ? ?通過父節(jié)點查找元素

//div[@style] ? ? ? ? ? ? ? ? 有style屬性的div

//div[last()] ??? ? ?最后一個div元素

//div[position()<=2] ? ? ? ? ? ?前兩個div元素

//p[@id='ui']/preceding-sibling::div ? ? ? ? 選擇兄弟節(jié)點前所有的div元素

//p[@id='ui']/following-sibling::div ? ? ? ? ?選擇兄弟節(jié)點后所有的div元素


2.css選擇元素

2.1? css可以通過元素的id、class、標簽這三個常規(guī)屬性直接定位到

2.2 .css用#號表示id屬性,如:#kw

?2.3? ?css用.表示class屬性,如:.s_ipt

? 2.4 .css直接用標簽名稱,無任何標示符,如:input

>表示直接子節(jié)點

div p 表示div下的所有p

hello>p,div ? ? ? 所有的p和所有的div

div+p ? ? ? ? ? ? ? 兄弟節(jié)點,緊挨著div下的p

div~p ? ? ? ? ? ? ? 兄弟節(jié)點div下所有的p

div[@style] ? ? ? 擁有style屬性的所有div

div:nth-of-type(1) ? ? ? ? ? 元素中為div的第一個

div:nth-of-child(1) ? ? ? ? ?子元素中所有_元素的第一個

driver.find_element_by_css_selector("#kw")

driver.find_element_by_css_selector(".s_ipt")

css 通過name 定位

driver.find_element_by_css_selector("[name='wd']")

css 通過autocomplete 定位

driver.find_element_by_css_selector("[autocomplete='off']")

css 通過type 定位

driver.find_element_by_css_selector("[type='text']")

css 組合標簽和屬性組合定位

driver.find_element_by_css_selector("input[id='kw']")

driver.find_element_by_css_selector("input#kw")

driver.find_element_by_css_selector("input.s_ipt")

driver.find_element_by_css_selector("input:contains('kw')")

同時匹配兩個屬性,中間不用and關(guān)鍵字

driver.find_element_by_css_selector("input[id='kw'][name='wd']")

屬性值由多個空格隔開,匹配其中一個值的方法

driver.find_element_by_css_selector("input[class~='btn']")

匹配屬性值為字符串開頭的方法

driver.find_element_by_css_selector("input[class^='btn']")

匹配屬性值字符串結(jié)尾的方法

driver.find_element_by_css_selector("input[class$='s_btn']")

匹配被-分割的屬性值的方法,如上圖的class

driver.find_element_by_css_selector("input[class|='s']") ?#要求精確填寫的屬性值

driver.find_element_by_css_selector('#u_sp > a:nth-child(1)')#id為u_sp的下面的第一個a標簽。

find_element_by_css_selector(“a[id=\”kw1\”]”)

find_element_by_css_selector(“a[name=\”wd\”]”)

find_element_by_css_selector(“a[title=\”web\”]”)

find_element_by_css_selector(“a.RecycleBin”)

E:nth-last-child(n),如字面意思:倒數(shù)第幾個標簽

E:first-child,第一個標簽

E:last-child,最后一個標簽

E:only-child,唯一的標簽

class 字符串的含有空格,空格用點號代替

li a.js-cartitem-count.cartitem-count


用add 包含多種屬性

//*[@data-accountid = '27221' and @data-type='job']



? XPath軸(XPath Axes)可定義某個相對于當前節(jié)點的節(jié)點集:

1、child選取當前節(jié)點的所有子元素

2、parent選取當前節(jié)點的父節(jié)點

3、descendant?選取當前節(jié)點的所有后代元素(子、孫等)

4、ancestor選取當前節(jié)點的所有先輩(父、祖父等)

5、descendant-or-self?選取當前節(jié)點的所有后代元素(子、孫等)以及當前節(jié)點本身

6、ancestor-or-self選取當前節(jié)點的所有先輩(父、祖父等)以及當前節(jié)點本身

???? 7、preceding-sibling 選取當前節(jié)點之前的所有同級節(jié)點

???? 8、following-sibling 選取當前節(jié)點之后的所有同級節(jié)點

???? 9、preceding?? 選取文檔中當前節(jié)點的開始標簽之前的所有節(jié)點

???? 10、following?? 選取文檔中當前節(jié)點的結(jié)束標簽之后的所有節(jié)點

???? 11、self? 選取當前節(jié)點

???? 12、attribute? 選取當前節(jié)點的所有屬性

???? 13、namespace 選取當前節(jié)點的所有命名空間節(jié)點


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容