Selenium2+python自動化-八種元素定位(Firebug和Firepath)

前言   css

自動化只要掌握四步操做:獲取元素,操做元素,獲取返回結果,斷言(返回結果與指望結果是否一致),最後自動出測試報告。本篇主要講如何用firefox輔助工具進行元素定位。
元素定位在這四個環節中是相當重要的,若是說按學習精力分配的話,元素定位佔70%;操做元素10%,獲取返回結果10%;斷言10%。若是一個頁面上的元素不能被定位到,那後面的操做就沒法繼續了。接下來就來說webdriver提供的八種基本元素定位方法。python

1、環境準備:web

    1.瀏覽器選擇:Firefox瀏覽器

    2.安裝插件:Firebug和FirePath(設置》附加組件》搜索:輸入插件名稱》下載安裝後重啓瀏覽器)函數

    3.安裝完成後,頁面右上角有個小爬蟲圖標工具

 

2、查看頁面元素:學習

以百度搜索框爲例,先打開百度網頁測試

    1.點右上角爬蟲按鈕spa

    2.點左下角箭頭firefox

    3.講箭頭移動到百度搜索輸入框上,輸入框高亮狀態

    4.下方紅色區域就是單位到輸入框的屬性:

     

 

3、元素定位-單數

 find_element_by_id()

  1.從上面定位到的元素屬性中,能夠看到有個id屬性:id="search-key",這裏能夠經過它的id屬性單位到這個元素。

  2.定位到搜索框後,用send_keys()方法
   

 find_element_by_name()

  1.從上面定位到的元素屬性中,能夠看到有個name屬性:name="wd",這裏能夠經過它的name屬性單位到這個元素。

  說明:這裏運行後會報錯,說明這個搜索框的name屬性不是惟一的,沒法經過name屬性直接定位到輸入框

   

 find_element_by_class_name()

  1.從上面定位到的元素屬性中,能夠看到有個class屬性:class="s_ipt",這裏能夠經過它的class屬性定位到這個元素。

   

 find_element_by_tag_name()

  1.從上面定位到的元素屬性中,能夠看到每一個元素都有tag(標籤)屬性,如搜索框的標籤屬性,就是最前面的input;

  2.很明顯,在一個頁面中,相同的標籤有不少,因此通常不用標籤來定位。如下例子,僅供參考和理解,運行確定報錯;

   

 find_element_by_link_text()

  1.定位百度頁面上"hao123"這個按鈕

  

  查看頁面元素:

  <a class="mnav" target="_blank" href="http://www.hao123.com">hao123</a>

  2.從元素屬性能夠分析出,有個href = "http://www.hao123.com,說明它是個超連接,對於這種元素,能夠用如下方法:

   

 find_element_by_partial_link_text()

  1.有時候一個超連接它的字符串可能比較長,若是輸入全稱的話,會顯示很長,這時候能夠用一模糊匹配方式,截取其中一部分字符串就能夠了;

  2.如「hao123」,只需輸入「ao123」也能夠定位到:

   

 find_element_by_xpath()

  1.以上定位方式都是經過元素的某個屬性來定位的,若是一個元素它既沒有id、name、class屬性也不是超連接,這麼辦呢?或者說它的屬性不少重複的。這個時候就能夠用xpath解決;

  2.xpath是一種路徑語言,跟上面的定位原理不太同樣,首先第一步要先學會用工具查看一個元素的xpath;

   

  3.安裝上圖的步驟,在FriePath插件裏copy對應的xpath地址;

   

 find_element_by_css_selector()

  1.css是另一種語法,比xpath更爲簡潔,可是不太好理解。這裏先學會如何用工具查看,後續的教程再深刻講解;

  2.打開FirePath插件選擇css;

  3.定位到後以下圖紅色區域顯示; 

  

4、元素定位-雙

  element和elements區別:

  1.element方法定位到是是單數,是直接定位到元素;

  2.elements方法是複數,這個學過英文的都知道,定位到的是一組元素,返回的是list隊列;

  3.能夠用type()函數查看數據類型;

 

  elements定位元素說明:

  1.當一個頁面上有多個屬性相同的元素時,而後父元素的屬性也比較模糊,不太好定位。這個時候不用怕,換個思惟,別老想着一次定位到,能夠先把相同屬性的元素找出來,取對應的第幾個就能夠了。

  2.以下圖,百度頁面上有六個class同樣的元素,我要定位「地圖」這個元素:

  

  3.取對應下標便可定位了:

  

 

  elements定位方法:

  

 

5、By定位元素:

find_element()方法只用於定位元素。它須要兩個參數,第一個參數是定位方式,這個由By 提供;第二個參數是定位的值。

ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"

例子:

from selenium.webdriver.common.by import By
'''  定位百度輸入框  '''

find_element(By.ID,"kw")
find_element(By.NAME,"wd")

 

 

總結:

selenium的webdriver提供了八種基本的元素定位方法,前面六種是經過元素的屬性來直接定位的,後面的xpath和css定位更加靈活,須要重點掌握其中一個:

1.經過id定位:find_element_by_id()

2.經過name定位:find_element_by_name()

3.經過class定位:find_element_by_class_name()

4.經過tag定位:find_element_by_tag_name()

5.經過link定位:find_element_by_link_text()

6.經過partial_link定位:find_element_by_partial_link_text()

7.經過xpath定位:find_element_by_xpath()

8.經過css定位:find_element_by_css_selector()

 

Class定位:

  class屬性有空格是多重屬性,取其中一個就行。

  

  

相關文章
相關標籤/搜索