Selenium用戶指南 - 第三章 Selenium IDE[4]

目錄    上一頁    下一頁

定位元素

對大多數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 Tutorial
    W3C 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.
目錄    上一頁    下一頁

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章