定位元素
對大多數Selenium命令,一個目標(Target)是必須的。目標標識在一個Web應用程序的內容中的一個元素,並且由一個定位策略跟着一個位置組成,以locatorType(定位類型)=location(位置)的形式出現。在許多情況下,定位類型可以忽略。各種各樣的定位類型解釋如下,每一個都帶有示例。
按identifier(按標識符)定位
這可能是最常用的定位元素的方法,它是包羅萬象的缺省,當沒有可識別的定位類型被使用時。應用這個策略,帶有id屬性匹配位置值的第一個元素將被使用。如果沒有元素包含一個匹配的id屬性,帶有name屬性匹配位置值的第一個元素將被使用
例如,你的頁面源代碼可能有id和name屬性如下:
1 <html>2 <body>
3 <form id="loginForm">
4 <input name="username" type="text" />
5 <input name="password" type="password" />
6 <input name="continue" type="submit" value="Login" />
7 </form>
8 </body>
9 <html>
下面的定位器策略將從以上的HTML代碼段返回由行號標示的元素
identifier=loginForm (3)identifier=password (5)
identifier=continue (6)
continue (6)
因爲標識符類型定位器是默認的,在上面的前三個示例中的identifier=不是必須的。
按id定位
這種類型的定位器是比標識符(identifier)有更多限制的定位器,但也更明確。當你知道元素的id屬性時使用它。
1 <html>2 <body>
3 <form id="loginForm">
4 <input name="username" type="text" />
5 <input name="password" type="password" />
6 <input name="continue" type="submit" value="Login" />
7 <input name="continue" type="button" value="Clear" />
8 </form>
9 </body>
10 <html>
id=loginForm (3)
按name定位
name定位器類型將定位第一個帶有一個匹配的name屬性的元素。如果多個元素有相同的name屬性值,則你可以使用過濾器進一步改善你的定位策略。默認的過濾器類型是值(匹配值屬性)
1<html>2 <body>
3 <form id="loginForm">
4 <input name="username" type="text" />
5 <input name="password" type="password" />
6 <input name="continue" type="submit" value="Login" />
7 <input name="continue" type="button" value="Clear" />
8 </form>
9 </body>
10<html>
name=username (4)
name=continue value=Clear (7)
name=continue Clear (7)
name=continue type=button (7)
Note
註釋
不像某些XPath和DOM定位器類型,上面三個定位器類型允許Selenium,不依賴於UI元素在頁面上的位置來測試UI元素。因此即時頁面的結構發生變化,測試仍然可以通過。你可能或可能不希望測試頁面的結構是否發生變化。在Web頁面的設計者頻繁地改變頁面,但頁面的功能必須進行迴歸測試的情況下,通過id和name屬性進行測試,或通過任何HTML屬性進行測試,將變得非常重要。
按XPath來定位
XPath是XML文檔中用於定位節點的語言。因爲HTML可能是一個XML的實現(XHTML),Selenium用戶可以利用這強有力的語言去定位他們的Web應用程序中的元素。XPath擴展了最簡單的按id和name屬性定位的方法(同樣支持),釋放了各種各樣的可能性,例如定位頁面上的第三個複選框。
使用XPath的主要的理由之一是你可能沒有你希望定位的元素的適當的id或name屬性。你可以使用XPath,要麼以絕對方式(不建議)定位元素,要麼以相對於一個有id或 name屬性的元素進行相對地定位。XPth定位器也可以按非id和name屬性的屬性定爲元素。
絕對定位的XPath包含從根(html)開始的所有元素的定位,作爲一個結果,即使應用程序進行最不重要的調整也可能導致定位的失敗。通過查找一個帶有id或name屬性的鄰近元素(理想地是一個父元素),你可以基於相對的關係定位你的目標元素。這種關係不太可能改變,這種定位方式會讓你的測試更健壯。
因爲只有XPth定位器以“//”開始,當指定一個XPath定位時,無需包含xpath=標籤。
1<html>2 <body>
3 <form id="loginForm">
4 <input name="username" type="text" />
5 <input name="password" type="password" />
6 <input name="continue" type="submit" value="Login" />
7 <input name="continue" type="button" value="Clear" />
8 </form>
9 </body>
10<html>
xpath=/html/body/form[1] (3) - Absolute path (would break if the HTML was changed only slightly)
//form[1] (3) - First form element in the HTML
xpath=//form[@id='loginForm'] (3) - The form element with attribute named ‘id’ and the value ‘loginForm’
xpath=//form[input/\@name='username'] (4) - First form element with an input child element with attribute named ‘name’ and the value ‘username’
//input[@name='username'] (4) - First input element with attribute named ‘name’ and the value ‘username’
//form[@id='loginForm']/input[1] (4) - First input child element of the form element with attribute named ‘id’ and the value ‘loginForm’
//input[@name='continue'][@type='button'] (7) - Input with attribute named ‘name’ and the value ‘continue’ and attribute named ‘type’ and the value ‘button’
//form[@id='loginForm']/input[4] (7) - Fourth input child element of the form element with attribute named ‘id’ and value ‘loginForm’
這些事例包含了某些基礎知識,要學習更多的內容,推薦訪問下面的資源:
W3Schools XPath TutorialW3C XPath Recommendation
還有幾個非常有用的Firefox插件,有助於發現一個元素的XPath:
XPath Checker - suggests XPath and can be used to test XPath results.Firebug - XPath suggestions are just one of the many powerful features of this very useful add-on.
XPath Checker - 建議XPath並可以用於測試XPath的結果
Firebug - XPath建議僅僅是這非常有用的插件的許多強有力特徵中的一個。
Locating Hyperlinks by Link Text
按鏈接文本定位超級鏈接(link定位器)
這是一個通過使用超級鏈接的文本,定位Web頁面中的超級鏈接的簡單方法。如果兩個超級鏈接帶有相同的文本,則時用第一個匹配。
1<html>2 <body>
3 <p>Are you sure you want to do this?</p>
4 <a href="continue.html">Continue</a>
5 <a href="cancel.html">Cancel</a>
6</body>
7<html>
link=Continue (4)
link=Cancel (5)
Locating by DOM
按DOM定位
文檔對象模型代表一個HTML文檔,可以使用Javascript訪問。這個定位策略使用Javascript對頁面上的元素進行計算,這樣可以層次的.標記法簡化元素的定位。
因爲只有dom定位器以“document”開始,當指定一個DOM定位器時,dom=標籤不是必需的。
1 <html>2 <body>
3 <form id="loginForm">
4 <input name="username" type="text" />
5 <input name="password" type="password" />
6 <input name="continue" type="submit" value="Login" />
7 <input name="continue" type="button" value="Clear" />
8 </form>
9 </body>
10 <html>
dom=document.getElementById('loginForm') (3)
dom=document.forms['loginForm'] (3)
dom=document.forms[0] (3)
document.forms[0].username (4)
document.forms[0].elements['username'] (4)
document.forms[0].elements[0] (4)
document.forms[0].elements[3] (7)
你可以使用Selenium本身已經其他的站點以及延伸站點去研究你的Web應用程序的DOM。在W3Schools上有很好的可供參考的資料。
按CSS定位
CSS(級聯樣式表)是用於描述HTML和XML文檔應如何繪製的語言。CSS使用選擇器綁定樣式屬性到文檔中的元素。
1 <html>
2 <body>
3 <form id="loginForm">
4 <input class="required" name="username" type="text" />
5 <input class="required passfield" name="password" type="password" />
6 <input name="continue" type="submit" value="Login" />
7 <input name="continue" type="button" value="Clear" />
8 </form>
9 </body>
10 <html>
css=form#loginForm (3)
css=input[name="username"] (4)
css=input.required[type="text"] (4)
css=input.passfield (5)
css=#loginForm input[type="button"] (4)
css=#loginForm input:nth-child(2) (5)
有關CSS選擇器的更多信息,最好的地方是W3C發佈站點。在那裏你可以找到其他的參考資料。
註釋
絕大多數有經驗的Selenium用戶推薦CSS作爲他們的選擇的定位策略,因爲它比XPath定位速度要快很多,並且可以在一個固有的HTML文檔中找到最複雜的對象。
隱含定位器
在下面的情況下,你可以選擇忽略定位器類型:
沒有顯式地定義定位器策略的定位器會默認使用identifier定位器策略。見按identifier定位。
以“//”開始的定位器將使用XPth定位器策略。見按XPath定位。
以“document”開始的定位器將使用DOM定位器策略。見按DOM定位。
© Copyright 2008-2012, Selenium Project. Last updated on Feb 02, 2012.