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.
目录     上一页     下一页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值