當使用id定位到正確的元素后,highlight方法會將該元素以紅色高亮顯示,借此也可以驗證代碼是否工作正常。
使用name屬性定位
soso首頁的搜索輸入框的html代碼如下:
<input type="text" name="w" smartpid="sb.idx" smartch="sb.c.idx" autocomplete="off" id="s_input" value="">
# 同樣定位soso首頁的搜索框
s_input = dr.find_element(:name => 'w')
使用css屬性定位
soso首頁的搜索輸入框的html代碼如下:
<input type="text" name="w" smartpid="sb.idx" smartch="sb.c.idx" autocomplete="off" id="s_input" value="">
官方文檔上說Selenium-WebDriver支持css3語法,這對使用jquery的同學來說無疑是一個好消息。
# css屬性定位soso首頁搜索框
s_input = dr.find_element(:css => '#s_input')
使用xpath定位
soso首頁的搜索輸入框的html代碼如下:
<input type="text" name="w" smartpid="sb.idx" smartch="sb.c.idx" autocomplete="off" id="s_input" value="">
# 使用xpath定位soso首頁搜索框
s_input = dr.find_element(:xpath => %Q{//input[@id='s_input' and @name='w']})
使用其他方式定位
在定位link對象的時候,可以使用link和link_text屬性;
另外還可以使用tag_name屬性定位任意元素;
定位多個元素
find_elements方法可以定位一組對象,例如
# 定位頁面上所有的link對象
all_links = driver.find_elements(:tag_name, 'a')
all_links.each do {|l| puts l.class} # ---> Selenium::WebDriver::Element
上面的代碼返回頁面上所有l(wèi)ink對象的數(shù)組
下面代碼演示了如何選取頁面上所有的button對象:
all_buttons = driver.find_elements(:tag_name, 'input').select do |i|
i['type'] == 'button'
end
層級定位
層級定位的思想是先定位父對象,然后再從父對象中精確定位出其我們需要選取的后代元素。
層級定位一般的應用場景是無法直接定位到需要選取的元素,但是其父元素比較容易定位,通過定位父元素再遍歷其子元素選擇需要的目標元素,或者需要定位某個元素下所有的子元素。
下面的代碼演示了如何使用層級定位選取id為bm的div下所有的link元素,并打印出所有其href
links = dr.find_element(:id, 'bm').find_elements(:css => 'a')
links.each do |l|
puts l['href']
end
這一節(jié)分享了Selenium-WebDriver定位元素的一般方法,下一節(jié)將介紹Selenium-WebDriver對frame的處理