定位元素
对大多数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.