乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      【selenium學(xué)習(xí)筆記】webdriver進行頁面元素定位

       落雨不悔 2019-04-18

      進行Web頁面自動化測試,對頁面上的元素進行定位和操作是核心。而操作又是以定位為前提的,因此,對頁面元素的定位是進行自動化測試的基礎(chǔ)。

      頁面上的元素就像人一樣,有各種屬性,比如元素名字,元素id,元素屬性(class屬性,name屬性)等等。webdriver就是利用元素的這些屬性來進行定位的。

      可以用于定位的常用的元素屬性:

      • id
      • name
      • class name
      • tag name
      • link text
      • partial link text
      • xpath
      • css selector
      對應(yīng)于webdriver中的定位方法分別是:
      • driver.find_element_by_name()——最常用,簡單
      • driver.find_element_by_id()——最常用,簡單
      • driver.find_element_by_class_name()
      • driver.find_element_by_tag_name()——最不靠譜
      • driver.find_element_by_link_text()——定位文字連接好用
      • driver.find_element_by_partial_link_text()——定位文字連接好用
      • driver.find_element_by_xpath()——最靈活,萬能
      • driver.find_element_by_css_selector()
      上面是定位一個元素的方法,相應(yīng)的webdriver也有定位一組元素的方法:
      • driver.find_elements_by_name()
      • driver.find_elements_by_id()
      • driver.find_elements_by_class_name()
      • driver.find_elements_by_tag_name()
      • driver.find_elements_by_link_text()
      • driver.find_elements_by_partial_link_text()
      • driver.find_elements_by_xpath()
      • driver.find_elements_by_css_selector()
      那么問題來了?怎么查看元素的name,id,class,tag,text,xpath,css選擇器呢?可以借助firefox瀏覽器的firebug插件(需要手動安裝)中firepath工具或者chrome的開發(fā)者工具(chrome自帶)。
      • Friebug
      打開firefox 瀏覽器的firebug 插件,點擊插件左上角的鼠標(biāo)箭頭,再點擊頁面上的元素,firebug插件的HTML 標(biāo)簽頁將看到頁面代碼,鼠標(biāo)移動到元素的標(biāo)簽上點擊一下。例如我們點擊百度首頁的“百度一下”按鈕:

      從FirePath中可以看到該元素的id,tag,class等屬性。

      • Chrome開發(fā)者工具(F12)
      打開Chrome瀏覽器,按下鍵盤的F12,即可以打開開發(fā)者工具。從開發(fā)者工具中可以得到和FirePath相同的結(jié)果:


      那么問題又來了,這么多屬性都可以用來定位,那么我們選擇哪種呢?其實,定位元素的方法沒有好壞之分,不同的場景有不同的適用方法,只要定位的唯一的一個元素的方法都是可以使用的。
      • id 和name 定位
      這是簡單的高效的方法。
      比如定位百度首頁文本框的方法,我們可以使用id來定位(該元素提供的id屬性,可以唯一定位到它):
      driver.find_element_by_id('kw')
      定位百度首頁右上角的“設(shè)置”鏈接,我們可以使用name來定位(該元素提供的name屬性,可以唯一定位到它):
      driver.find_element_by_name('tj_trnews')
      • class name和tag name定位
      不是所有的前端開發(fā)人員都喜歡為每一個元素添加id 和name 兩個屬性,但除此之外你一定發(fā)現(xiàn)了一個元素不單單只有id 和name,它還有class 屬性;而且每個元素都會有tag標(biāo)簽。
      還是定位百度首頁的文本框,除了用id方法定位之外,我們還可以用class name來定位(該元素提供的class屬性,也可以唯一定位到它)。
      driver.find_element_by_class_name("s_ipt")
      tag name 定位應(yīng)該是所有定位方式中最不靠譜的一種了,因為在一個頁面中具有相同tag name 的元素極其容易出現(xiàn),很少具有唯一性。不用學(xué)習(xí)它了。
      • link text 與partial link text 定位
      有時候需要操作的元素是一個文字鏈接,那么我們可以通過link text 或partial link text 進行元素定位。
      比如,定位百度首頁右上角的“新聞”,“hao123”,。。。。等等這些文字連接。就可以使用link text和partail link text定位方式。可以先使用FireBug看下網(wǎng)頁源碼:


      通過linx text定位:
      1. find_element_by_link_text("新聞")
      2. find_element_by_link_text("貼吧")
      通過partail link text定位:
      1. find_element_by_link_text("新")
      2. find_element_by_link_text("貼")
      • XPath 定位
      XPath是一種文檔定位語言。因為HTML可以看做是XML的一種實現(xiàn),所以selenium用戶可使用這種強大的語言在web應(yīng)用中定位。
      絕對路徑方法:
      從根元素寫起,當(dāng)元素層級很深的時候,路徑寫的會很長,閱讀性不好,也很難維護。不建議使絕對路徑這樣的方法。
      相對路徑方法:
      通過Firebug很容易得到相對路徑的xpath,打開Firebug插件,在頁面上的搜索文本框,就可以顯示出xpath了:
      <pre name="code" class="python">driver.find_element_by_xpath("http://*[@id='kw']").click()
      
      上面的寫法可以理解為,通過xpath尋找,任意(*代表)id屬性為’kw‘的元素。當(dāng)然我們也可以把*替換成input,即:
      driver.find_element_by_xpath("http://input[@id='kw']").click()
      這種寫法可以理解為,通過xpath尋找,任意id屬性為’kw‘的input元素。
      有的時候,需要根據(jù)上級目錄的屬性來定位當(dāng)前元素:
      1. find_element_by_xpath("http://span[@id=’input-container’]/input") #通過上一級目錄的id 屬性定位
      2. find_element_by_xpath("http://div[@id=’hd’]/form/span/input") #通過上三級目錄的id 屬性定位
      3. find_element_by_xpath("http://div[@name=’q’]/form/span/input")#通過上三級目錄的name 屬性定位
      • CSS定位
      這種定位方法是比較難理解的。TBD,當(dāng)前工作中也沒有遇到,必須使用這種方式才能定位到元素的情況。

      • 關(guān)于自動化的定位問題
      自動化測試的元素定位一直是困擾自動化測試新手的一個障礙,因為我們在自動化實施過程中會碰到各式各樣的對象元素。雖然XPath 和CSS 可以定位到復(fù)雜且比較難定位的元素,但相比較用id 和name 來說增加了維護成本和學(xué)習(xí)成本,相比較來說id/name 的定位方式更直觀和可維護,有新的成員加入的自動化時也增加了人員的學(xué)習(xí)成本。所以,測試人員在實施自動化測試時一定要做好溝通,規(guī)范前端開發(fā)人員對元素添加id/name 屬性,或者自己有修改HTML 代碼的權(quán)限。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多