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