中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

selenium+python自動化測試之頁面元素定位

發布時間:2020-09-29 20:51:11 來源:腳本之家 閱讀:193 作者:zh175578809 欄目:開發技術

上一篇博客selenium+python自動化測試(二)–使用webdriver操作瀏覽器講解了使用webdriver操作瀏覽器的各種方法,可以實現對瀏覽器進行操作了,接下來就是對瀏覽器頁面中的元素進行操作,操作頁面元素,首先要找到操作的元素,對元素進行定位

查看頁面源碼

要定位頁面元素,需要找到頁面的源碼,IE瀏覽器中,打開頁面后,在頁面上點擊鼠標右鍵,會有“查看源代碼”的選項,點擊后就會進入頁面源碼頁面,在這里就可以找到頁面的所有元素

使用Chrome瀏覽器打開頁面后,在瀏覽器的地址欄右側有一個圖標,點擊這個圖標后,會出現許多菜單項,選擇更多工具里的開發者工具,就會出現頁面的源碼,不同版本的瀏覽器菜單選項可能不同,但是都會在開發者工具里找到頁面的源碼

Firefox瀏覽器打開頁面后,在右鍵菜單里也可以找到“查看頁面源代碼”的選項。在Firefox中,可以使用瀏覽器自帶的插件查看定位元素,在Firefox的附加組件里搜索firebug進行下載,安裝firebug組件后會在瀏覽器的工具欄中多出一個小蟲子的圖標,點擊這個圖標就可以打開組件查看頁面源碼,打開后如下圖所示

selenium+python自動化測試之頁面元素定位

以百度首頁搜索頁面為例,看一下webdriver定位元素的八種方式

使用id定位

在頁面源碼中找到搜索輸入框的元素定義

<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

可以看到輸入框有一個有一個id的屬性,調用find_element_by_id()根據id屬性來找到元素,參數為屬性的值

input_search = driver.find_element_by_id("kw")

使用name定位

使用find_element_by_name()根據name屬性找到元素,參數為name屬性的值

搜索框有一個name=”wd”的屬性,使用name查找搜索輸入框元素

input_search = driver.find_element_by_name("wd")

使用className定位

使用find_element_by_class_name()根據className屬性找到元素,參數為className屬性的值

搜索框有一個class=”s_ipt”的屬性,使用className查找元素

input_search = driver.find_element_by_class_name("s_ipt")

使用tagName定位

使用find_element_by_tag_name()根據tagName屬性找到元素,參數為元素標簽的名稱

每個頁面的元素都有一個tag,搜索框的標簽為input,有時候一個頁面里有許多相同的標簽,所以用這種方法找到的元素一般都不準確,除非這個元素使用的標簽在這個頁面里是唯一的。一般不會使用這種方式來定位元素

input_search = driver.find_element_by_class_name("input")

使用link_text定位

頁面上都會有一些文本鏈接,點擊鏈接后會打開一個新的頁面,這些可以點擊的鏈接可以使用find_element_by_link_text來定位,百度首頁上方有如下幾個元素

selenium+python自動化測試之頁面元素定位

例如要定位“新聞”,找到元素的代碼,有一個href的屬性,這是點擊后打開的頁面

<a  rel="external nofollow" name="tj_trnews" class="mnav">新聞</a>

使用link_text查找元素,參數為元素的文本信息

news = driver.find_element_by_link_text("新聞")

使用partial_link_text定位

這種方式類似于link_text的定位方式,如果一個元素的文本過長,不需要使用文本的所有信息,可以使用其中的部分文本就可以定位

使用partial_link_text查找百度首頁的“新聞”元素,參數為文本信息,可以使用全部的文本,也可以使用部分文本

news = driver.find_element_by_link_text("新聞") //使用全部文本
news = driver.find_element_by_link_text("新") //使用部分文本

使用css selector定位

使用css屬性定位元素有多種方法,可以使用元素的id、name、className,也可以使用元素的其他屬性,如果一個元素沒有上述的幾種屬性或者定位不到時,可以使用css來定位

還是使用百度搜索框的實例來說明css定位的用法

<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
  • css使用元素的id定位

css屬性使用id定位時,使用#號表示元素的id

input_search = driver.find_element_by_css_selector("#kw") //使用元素的id定位
  • css使用元素的class定位

css屬性使用class定位時,使用.號表示元素的class

input_search = driver.find_element_by_css_selector(".s_ipt") //使用元素的class定位
  • css使用元素的tag定位

css屬性使用tagName定位時,直接使用元素的標簽

input_search = driver.find_element_by_css_selector("input") //使用元素的tagName定位
  • css使用元素的其他屬性

除了上述3種屬性,css屬性可以使用元素的其他屬性定位,格式如下

input_search = driver.find_element_by_css_selector("[maxlength='255']") //使用元素的maxlength屬性定位
input_search = driver.find_element_by_css_selector("[autocomplete='off']") //使用元素的autocomplete屬性定位

可以在參數中加入元素的標簽名稱

input_search = driver.find_element_by_css_selector("input#kw") //使用元素的id定位
input_search = driver.find_element_by_css_selector("input.s_ipt") //使用元素的class定位driver.find_element_by_css_selector("input[maxlength='255']") //使用元素的maxlength屬性定位
input_search = driver.find_element_by_css_selector("input[autocomplete='off']") //使用元素的autocomplete屬性定位
  • css的層級定位

當一個元素使用自身的屬性不容易定位時,可以通過它的父元素來找到它,如果父元素也不好定位,可以再通過上元素來定位,以此類推,一直找到容易定位的父元素為止,通過層級定位到需要查找的元素

通過Firefox的firebug組件查看百度首頁的源碼

selenium+python自動化測試之頁面元素定位

通過層級來定位搜索框

input_search = driver.find_element_by_css_selector("form#form>span:nth-child(1)>input")
input_search = driver.find_element_by_css_selector("form.fm>span:nth-child(1)>input")

搜索框的父元素為span標簽,span的父元素為form,form有id和class屬性,可以通過這兩個屬性來定位,找到form元素后,form下有多個span標簽,所以要使用span:nth-child(1),表示form下的第一個span標簽,這種用法很容易理解,表示第幾個孩子,最后是span下的input標簽,span下只有一個input,所以就可以定位到搜索框

  • css邏輯運算

用一個屬性來定位元素時,如果有其他元素的屬性和此元素重復,可以組合多個屬性來功共同定位

組合多個屬性定位元素定位百度搜索框

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

在元素內定義的屬性,都可以使用css來定位,使用其他幾種方式無法定位到元素時,可以使用css,夠強大!

使用xpath定位

XPath是一種在XML文檔中定位元素的語言。因為HTML可以看做XML的一種實現,所以selenium用戶可是使用這種強大語言在web應用中定位元素。xpath也可以通過元素的各種屬性定位到元素

使用元素屬性定位

input_search = driver.find_element_by_xpath("http://*[@id='kw']") //通過元素id查找元素
input_search = driver.find_element_by_xpath("http://*[@name='wd']") //通過元素name查找元素
input_search = driver.find_element_by_xpath("http://*[@class='s_ipt']") //通過元素class查找元素
input_search = driver.find_element_by_xpath("http://*[@maxlength='255']") //通過其他屬性查找元素
input_search = driver.find_element_by_xpath("http://*[@autocomplete='off']") //通過其他屬性查找元素

前面的*號表示查找所有的標簽元素,可以替換為標簽名稱,更準確的定位元素

input_search = driver.find_element_by_xpath("http://input[@id='kw']") //通過元素id查找元素
input_search = driver.find_element_by_xpath("http://input[@name='wd']") //通過元素name查找元素
input_search = driver.find_element_by_xpath("http://input[@class='s_ipt']") //通過元素class查找元素
input_search = driver.find_element_by_xpath("http://input[@maxlength='255']") //通過其他屬性查找元素
input_search = driver.find_element_by_xpath("http://input[@autocomplete='off']") //通過其他屬性查找元素
  • xpath層級定位

xpath也可以通過層級來定位,定位方式

selenium+python自動化測試之頁面元素定位

input_search = driver.find_element_by_xpath("http://input[@id='form']//span[1]//input")
driver.find_element_by_xpath("http://input[@class='fm']//span[1]//input")

查找效果和通過css的層級定位是相同的,意思是form元素下面的第一個span元素的input標簽子元素

  • xpath

xpath的邏輯元素通過and運算符來組合元素屬性

input_search = driver.find_element_by_xpath("http://input[@id='kw' and name='wd']")
  • 屬性匹配

xpath中還有一種更強大的定位方式,通過模糊匹配元素的屬性

news = driver.find_element_by_xpath("http://a[contains(text(), '新聞')]") //查找text中包含"新聞"的元素
input_search = driver.find_element_by_xpath("http://input[contains(@id, 'kw']") //查找id中包含"kw"的元素
input_search = driver.find_element_by_xpath("http://input[starts-with(@id, 'k']") //查找id以"k"開頭的元素
input_search = driver.find_element_by_xpath("http://input[ends-with(@id, 'w']") //查找id以"w"結尾的元素
input_search = driver.find_element_by_xpath("http://input[matchs(@id, 'k*']") //利用正則表達式查找元素

上面介紹了查找頁面元素的八種方法,通過這些方式找到的都是單個元素,如果需要批量查找元素,還有和上面方式對應的八種復數形式

find_elements_by_id
find_elements_by_name
find_elements_by_class_name
find_elements_by_tag_name
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_css_selector
find_elements_by_xpath

這8種方法查找到的是一組元素,返回的是list,可以通過索引來操作元素

例如頁面上的復選框和單選框,或者頁面上有多個屬相相同的輸入框,這些屬性相同的一組元素,可以批量獲取,然后過濾出需要操作的元素,選擇其中的一個或者多個進行操作

通過百度首頁搜索“selenium”關鍵字,會出現許多搜索結果,這些搜索結果具有相同的屬性,不同的是屬性的值不同,定位這些元素時,可以使用批量定位的方法

看下面的代碼

selenium+python自動化測試之頁面元素定位

這是搜索selenium關鍵字后的頁面結果,每一個搜索結果都是可點擊的鏈接,定位這些元素的方法:

search_results = driver.find_elements_by_css_selector("h.t>a")
search_results[3].click() //通過索引點擊第4條搜索結果

第二個例子

<html>
 <head></head>
 <body>
 <h4>checkbox</h4>
 <div class="well">
  <form class="form-horizontal">
  <div class="control-group">
   <label class="control-label" for="c1">checkbox1</label>
   <div class="controls">
   <input type="checkbox" id="c1" />
   </div>
  </div>
  <div class="control-group">
   <label class="control-label" for="c2">checkbox2</label>
   <div class="controls">
   <input type="checkbox" id="c2" />
   </div>
  </div>
  <div class="control-group">
   <label class="control-label" for="c3">checkbox3</label>
   <div class="controls">
   <input type="checkbox" id="c3" />
   </div>
  </div>
  </form>
 </div>
 </body>
</html>

這個頁面上有3個復選框,打開后如下圖所示:

selenium+python自動化測試之頁面元素定位

操作復選框

//查找所有的復選框并點擊
checkboxs = driver.find_element_by_xpath('input[@type="checkbox"]')
for checkbox in checkboxs:
 checkbox.click()
//點擊最后一個復選框
checkboxs[2].click()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天津市| 昂仁县| 台东县| 南漳县| 上饶市| 周口市| 三河市| 德江县| 会昌县| 酒泉市| 社旗县| 宁晋县| 邳州市| 麻江县| 长治市| 寿光市| 平安县| 丰县| 五原县| 博罗县| 贵阳市| 丁青县| 凤翔县| 辉县市| 隆回县| 邹平县| 青阳县| 永康市| 鄂托克前旗| 资讯| 建宁县| 兴隆县| 惠东县| 东至县| 马龙县| 北安市| 龙胜| 尤溪县| 武功县| 莎车县| 贵溪市|