Webdriver常用的元素定位


Webdriver常用定位元素的方法有以下八種:

id、name、class name、tag name、link text、partial link text、xpath、class selector

在Python中,對應的方法為:

  • find_element_by_id()
  • find_element_by_name()
  • find_element_by_class_name()
  • find_element_by_tag_name()
  • find_element_by_link_text()
  • find_element_by_partial_link_text
  • find_element_by_xpath()
  • find_element_by_css_selector()

備注:元素定位必須確保該定位方式定位出的元素具有唯一性,若定位出多組元素,需對元素進行篩選,或者調整定位方式。

以下定位方式以百度首頁為例進行元素定位:

通過Firefox()打開百度首頁,通過Firebug(F12)查看百度首頁的JS代碼,定位到輸入框:

<form id="form" class="fm" action="/s" name="f">
<input type="hidden" value="utf-8" name="ie">
<input type="hidden" value="8" name="f">
<input type="hidden" value="0" name="rsv_bp">
<input type="hidden" value="1" name="rsv_idx">
<input type="hidden" value="" name="ch">
<input type="hidden" value="baidu" name="tn">
<input type="hidden" value="" name="bar">
<span class="bg s_ipt_wr quickdelete-wrap">
<span class="soutu-btn"></span>
<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">
<a id="quickdelete" class="quickdelete" href="javascript:;" title="清空" style="top: 0px; right: 0px; display: none;"></a>
</span>
<span class="bg s_btn_wr"> <input id="su" class="bg s_btn" type="submit" value="百度一下">

1、id定位

find_element_by_id("kw")

2、name定位

find_element_by_name("wd")

3、class name定位

find_element_by_class_name("s_ipt")

4、tag name定位

find_element_by_tag_name("input"),因存在多個'input'的tag標簽,通過此方式無法定位到百度輸入框

5、link text定位

<div id="u1">
<a class="mnav" name="tj_trnuomi" href="http://www.nuomi.com/?cid=002540">糯米</a>
<a class="mnav" name="tj_trnews" href="http://news.baidu.com">新聞</a>
<a class="mnav" name="tj_trhao123" href="http://www.hao123.com">hao123</a>
<a class="mnav" name="tj_trmap" href="http://map.baidu.com">地圖</a>
<a class="mnav" name="tj_trvideo" href="http://v.baidu.com">視頻</a>
<a class="mnav" name="tj_trtieba" href="http://tieba.baidu.com">貼吧</a>

link用來定位文本鏈接,通過在百度首頁點擊'新聞'、'地圖'等都可以進入到對應的頁面,因此可以用link進行定位:

find_element_by_link_text("新聞")

find_element_by_link_text("地圖")

6、partial link text定位

此方式為link text的一個補充,當文件鏈接過長時,只需截圖一部分文本即可:

<a class="mnav" name="tj_trnews" href="http://news.baidu.com">一個很長很長很長的新聞</a>

find_element_by_patial_link_text("很長的新聞")

7、xpath定位(重要)

1)直接通過Firefox的插件Firebug定性定位

 

2)、通過絕對路徑定位

如定位百度首頁的輸入框,需要一層一層的定位:

driver.find_element_by_xpath('/html/body/div[3]/div/div/div/div/form/span/input')

div[3]表示當前層級下的第三個div標簽

這種定位方式比較繁瑣,適用性不強

3)、利用元素屬性定位

drive.find_element_by_xpath("//input[@id='kw']")

//表示當前頁面下的某個目錄,也可以用/*表示整個目錄,input表示標簽名,@id='kw'表示標簽名下id='kw'的元素,除了用id定位,也可以使用

輸入框的其他元素屬性定位。

4)、層級與屬性結合定位

 

<span class="bg s_ipt_wr quickdelete-wrap">
    <span class="soutu-btn"></span>
    <input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">

 

該方式可以先定位到上一層級文件,然后再往下定位,比如定位百度輸入框,可以先定位到父元素,再往下查找元素

find_element_by_xpath("span[class='bg s_ipt_wr']/input")

5)、使用邏輯運算符定位

若一個屬性不能唯一區分,可以用邏輯運算符將多個屬性結合起來查找元素

 

<input id='aa1' class='bb1' name='cc'>
<input id='aa1' class='bb2' name='cc'>
<input id='aa2' class='bb1' name='cc'>

 

如上所示,若只是通過單方式去定位元素,元素不唯一,需將元素結合起來一起定位:

find_element_by_xpath("/*[@id='aa1' and @class='bb1']")

 8、css selector定位(重要)

css選擇器的常見語法

 

使用方式如下:

1)、通過class定位

 find_element_by_css_selector('.s_ipt')

2)、通過id定位

find_element_by_css_selector('#kw')

3)、共拓標簽名定位

find_element_by_css_selector('input'),此方式定位不適用

4)、通過屬性定位

find_element_by_css_selector('[name="wd"]')

5)、通過父子關系定位

find_element_by_css_selector("form > span"),其中'>'可以用空格代替,為了增加辨識,最好使用'>'

6)、通過組合定位的方式

即通過class或者id一起組合定位。

除此之外,也可以通過By來聲明定位,在使用之前需先導入By類

from selenium.webdriver.common.by

 

find_elements_by.....此時是定位一組元素,比如根據tag name來定位時,可以先定位一組元素,通過find_elements_by_tag_name(' ')[]來進行篩選。


免責聲明!

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



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