基於Python的Web自動化(Selenium)之元素定位


不管是APP(Android)自動化測試,還是Web自動化測試,都是需要進行元素的獲取的。所以這次要說的就是如何獲取Web頁面元素。

慣例介紹:

一、頁面概況

其實上次我們一個簡單的腳本是如下頁面:


頁面概況

這其實就是百度的首頁,在這張頁面上有輸入框、按鈕和文字鏈接,還有一些圖片、頁面底部的文字,以及一些設置下拉框等。自動化要做的就是模擬鼠標和鍵盤來操作這些元素,或單擊,或輸入等。通過前端工具,可以看到頁面上的元素都是由一行行代碼組成的,它們之間有層級的組織起來,每個元素有不同的標簽名和屬性值。WebDriver就是通過這些信息找到不同的元素。

二、元素概況


頁面元素

有兩種方式查看頁面元素:

 

(1)通過鍵盤"F12"按鍵可以調出來

 

(2)通過右擊頁面,選擇菜單檢查即可,方便定位出元素

 


菜單頁面

如何獲取?

一、綜述

1、WebDriver提供了8種元素定位方法,在Python語言中,所對應方法如下:

1.1第一種對應方式

 

id                                       —>                    find_element_by_id() 

 

class name                       —>                    find_element_by_class_name()

 

link text                             —>                    find_element_by_link_text()

 

xpath                                —>                    find_element_by_xpath() 

 

name                                —>                     find_element_by_name()

 

tag name                          —>                    find_element_by_tag_name()

 

partial link text                 —>                   find_element_by_partial_link_text()

 

css selector                     —>                    find_element_by_css_selector()

 

1.2第二種對應方式(By定位元素)

前提是需要導入相應的類:from selenium.webdriver.common.by import By

 

id                                       —>                  find_element(By.ID,"")

 

class name                       —>                  find_element  (By.CLASS_NAME,"")

 

link text                             —>                  find_element (By.LINK_TEXT,"")

 

xpath                                —>                   find_element (By.XPATH,"")

 

name                                —>                  find_element (By.NAME,"")

 

tag name                          —>                   find_element (By.TAG_NAME,"")

 

partial link text                  —>                   find_element_by (By.PARTIAL_LINK_TEXT,"")

 

css selector                      —>                   find_element_by (By.CSS_SELECTOR,"")

 

二、詳解

百度首頁的前端代碼:


百度首頁部分前端代碼

以輸入框和“百度一下”為例:


百度首頁輸入框前端代碼

 


百度首頁”百度一下“前端代碼

1、id定位

find_element_by_id("kw")

find_element_by_id("su")

或者

find_element(By.ID,"kw")

find_element(By.ID,'"su")

2、name定位

find_element_by_name("wd")

或者

find_element(By.NAME,"wd")

3、class定位

find_element_by_class_name("s_ipt")

或者

find_element(By.CLASS_NAME,"s_ipt")

4、tag定位

find_element_by_tag_name("input")

或者

find_element(By.TAG_NAME,"input")

5、link定位

link定位與前面介紹的幾種定位方法有所不同,它專門用來定位文本鏈接,例如:


超鏈接文本

find_element_by_link_text("新聞")

或者

find_element(By.LINK_TEXT,"新聞")

以上幾個都可以使用此方式。

6、partial link定位

此定位方式和link定位類似,不過有些文本鏈接會比較長,這個時候就可以取文本的一部分定位,只要這一部分信息可以唯一的標示這個鏈接即可,例如:


長鏈接文本

find_element_by_partial_link_text("新聞大發現")

或者

find_element(By.PARTIAL_LINK_TEXT,"新聞大發現")

7、xpath定位

xpath定位方式比較多,是一種在XML文檔中定位元素的語言。因為HTML可以看作XML的一種實現,所以Selenium可以使用這種強大的語言在Web應用中定位元素。

7.1絕對路徑定位

參考百度首頁前端代碼,可以找到輸入框:


百度首頁輸入框

find_element_by_xpath("/html/body/div/div/div[5]/div/div/form/span/input") 

或者

find_element (By.XPATH,"/html/body/div/div/div[5]/div/div/form/span/input")

7.2利用元素屬性定位

這里就說一中簡單的方式,百度首頁右擊檢查定位到元素所在前端代碼位置,然后右擊選擇"copy XPath":


元素屬性定位

find_element_by_xpath("//*[@id="kw"]") 

或者

find_element (By.XPATH,"//*[@id="kw"]")

xpath不限於所寫方式,還有一些復雜定位方式(組合定位),遇到難以定位時可以使用。

8、CSS定位

CSS(Cascading Style Sheets)是一種語言,用來描述HTML和XML文檔的表現。


百度首頁輸入框

8.1class定位

find_element_by_class_name(".s_ipt")

或者

find_element_by (By.CSS_SELECTOR,".s_ipt")

點號(.)表示通過class屬性來定位元素。

8.2id定位

find_element_by_class_name("#kw")

或者

find_element_by (By.CSS_SELECTOR,"#kw")、

井號(#)表示通過id屬性來定位元素。

CSS不限於所寫方式,還有一些復雜定位方式(組合定位),遇到難以定位時可以使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM