Selenium 元素定位之相對 絕對路徑

2021-08-14 15:16:15 字數 1651 閱讀 5127

絕對路徑,這裡以xpath舉例:

/html/body/div/form[@name=「f」]/span[@class=「bg s_btn_wr」]/input[@id="su"]

這就是乙個絕對路徑,從網頁的root節點html開始,按照xpath的路徑一層一層向下尋找。如果當中有任意乙個節點沒有找到對應的元素,那麼就會返回none。比如form之前還有一層div,那麼按照絕對路徑是找不到input這個元素的,因為在第乙個div之後並沒有form元素的存在。

相對路徑:

在selenium的元素定位中,真正常用的是相對路徑,因為絕對路徑太過冗長而且死板。而相對路徑就靈活地多,既可以掃瞄整個文件返回符合路徑定義的元素,也可以在某個特定元素下去搜尋。

// :只依據給出的路徑匹配節點而不考慮當前節點在**

還是以上面那個input元素為例,我可以寫成//input[@id="su"], 也可以寫成//span/input[@id='su'], 亦或//span[@class="bg s_btn_wr"]/input. 都可以定位到input這個元素。這些xpath語句翻譯出來就是,找到所有id為su的input元素,找到所有上層元素是span且id為su的input元素,找到所有上層元素span的class為bg s_btn_wr的input元素。 selenium會去搜尋整個文件,只要符合你給出的這一段路徑都會返回。

再舉個例子 //span[@class="bg s_btn_wr"], 如下的這些span元素都能夠找到 /

.../...

/... /

//...

接下來介紹另乙個相對路徑的表達

.// :依據給出的路徑匹配當前元素下節點

這個表示式只會搜尋當前節點下符合路徑的元素,而不是整個文件。

以上面這段html為例:

driver = webdriver.firefox()

driver.get("")

element = driver.find_element_by_xpath(.//input[@class="btn"])

這裡因為沒有指定當前的元素所以還從root節點開始查詢整個文件, 所以button1和button2都是符合條件的。

driver = webdriver.firefox()

driver.get("")

span_element=driver.find_element_by_tag('span')

element = driver.find_element_by_xpath(span_element,.//input[@class="btn"]

這裡我們先找到了span元素,然後在他的子元素中去尋找class=btn的input元素,那麼只有button2會被找到。

在實踐中發現,並不總能遇到通過一些唯一屬性組合定位到元素的情況。特別是現在很多網頁的內容是靠動態載入進來的,而不是hard code在**中,那麼想通過唯一的屬性組合定位元素就很困難。因為只有一些元素會有id,name等屬性,那些動態載入進來的內容由於運用了模板,其class,css等屬性都是相同的。這個時候就可以先定位到可以定位的元素,然後利用相對路徑在它的子元素中再去篩選符合條件的元素。這樣範圍變小了,定位也會相對容易,**也更簡潔易懂。

Selenium之元素定位

1.檢視頁面元素 id class type name等。2.通過webdriver的方法定位 絕對路徑 find element by xpath html body div 1 div 1 div div 1 div form span 1 input 相對路徑 find element by ...

selenium元素定位之CSS

css是一種語言,用來描述html和xml文件的屬性,css使用選擇器來為頁面屬性繫結屬性。這些選擇器可以被selenium用來當做定位元素的策略。css選擇器常見的語法 選擇器舉例 描述.class dou class選擇器,選擇class dou 的所有元素 id gao id選擇器,選擇id ...

selenium之元素定位方法

4 class 5 link text 超連結文字 6 xpath 7 css定位 8 定位相同元素第二個 type text class s ipt name wd id kw maxlength 100 autocomplete off driver.find element by id kw ...