Selenium webdriver能夠模擬人對(duì)瀏覽器進(jìn)行操作的前提是界面元素的定位。元素的定位可以說(shuō)是Selenium自動(dòng)化腳本的基礎(chǔ)。這一小節(jié)筆者將介紹如何在selenium中進(jìn)行元素的定位。
定位元素的方法
Selenium中提供了以下定位元素的方法:
首先看一個(gè)HTML文件 test_page.:
<html>
<body>
<form class="form-test" name="register" action="success.html" method="post">
<h3>注冊(cè)賬號(hào)</h3>
<a href="/home">Home Page</a>
<table bgcolor="aqua">
<tr>
<td>昵稱:</td>
<td><input id="input username" type="text" name="username" class="input"></td>
</tr>
<tr>
<td>密碼:</td>
<td><input type="text" name="password"></td>
</tr>
<tr>
<td>確認(rèn)密碼:</td>
<td><input type="text" name="confPassword"></td>
</tr>
<tr>
<td>性別:</td>
<td>
<input type="radio" name="sex" value="man" checked>男
<input type="radio" name="sex" value="woman">女
</td>
</tr>
</table>
</form>
</body>
</html>
1. id
通過(guò)元素的id來(lái)完成username輸入框的定位。
require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"
# by id
dr.find_element(:id, 'input username').click
2.name
通過(guò)元素的name屬性來(lái)完成對(duì)username輸入框的定位。
require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"
# by name
dr.find_element(:name, 'username').click
3. class name
通過(guò)元素的class屬性來(lái)完成對(duì)username輸入框的定位。
require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"
# by name
dr.find_element(:class, 'input').click
4. link text和partial link text
通過(guò)鏈接元素的text屬性來(lái)完成Home Page鏈接的定位。
require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"
# by link_text
link_text = dr.find_element(:link_text, 'Home Page').get_text
puts link_text
# by partial_link_text
link_text = dr.find_element(:partial_link_text, 'Home').get_text
puts link_text
5. tag name
通過(guò)標(biāo)簽的name來(lái)完成header元素的定位
require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"
# by tag name
header_text = dr.find_element(:tag_name, 'h3').get_text
puts header_text
6. xpath
xpath是用來(lái)定位HTML文檔中元素的通用方法,有一套自己的語(yǔ)法規(guī)則,支持各種函數(shù),可以說(shuō)是一種最全面的定位方法。我在開(kāi)發(fā)Selenium自動(dòng)化用例的過(guò)程中,最多使用的就是xpath。
這里只用簡(jiǎn)單的例子說(shuō)明xpath的定位使用,具體的xpath的使用將在另外的專題中介紹。
require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"
# by xpath
dr.find_element(:xpath, "http://tr/td/input[@value='women']").click
7. css selector
css selector和xpath一樣,也是功能非常強(qiáng)大的定位方法。但是與xpath不同,css selector只能支持向后定位,而xpath可以支持向前和向后定位。
下面的例子講展示如何用css selector定位xpath例子中的同一個(gè)元素。
require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"
# by css selector
dr.find_element(:css, "tr>td>input[value='women']").click
定位一組元素
Selenium中支持同時(shí)獲取一組元素的定位,這在處理多選項(xiàng)選擇,或者表格元素的時(shí)候非常有用。
require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"
# Get number of items
num_of_tds = dr.find_elements(:tag_name, "td").count