定位页面元素

对于很多Selenium命令,target域是必须的。Target在web页面范围内识别UI元素,它使用locatorType=location的格式。在很多情况下,locatorType可以省略,下面是各种类型的locatorType

1.帷千官网登陆页面如下:

<form id="user-login-form" accept-charset="UTF-8" method="post" action="/home?destination=node/53">

<div>
<div class="form-item form-type-textfield form-item-name">
<label for="edit-name">
用户名:
<span class="form-required" title="此项必填。">*</span>
</label>
<input id="edit-name" class="form-text required" type="text" maxlength="60" size="15" value="" name="name">
</div>
<div class="form-item form-type-password form-item-pass">
<label for="edit-pass">
密码:
<span class="form-required" title="此项必填。">*</span>
</label>
<input id="edit-pass" class="form-text required" type="password" maxlength="60" size="15" name="pass">
</div>
<div id="edit-actions" class="form-actions form-wrapper">
<input id="edit-submit" class="form-submit" type="submit" name="op" value="登录">
<input class="edit-register form-submit" type="button" onclick="Javascript:window.location.href='/AccountRegister'" name="op" value="注册">
</div>
<input type="hidden" value="user_login_block" name="form_id">
<input type="hidden" value="form-_LoJZEaEDcJ5uJgyqRlnLcjq1HHuU05eWECwMoVQh9A" name="form_build_id">
</div>
</form>
1.identifier定位

这是一种普遍的定位方式,当不能识别为其它定位方式后,默认为identifier定位,在这种策略下,第一个使用id的页面元素将被识别出来,如果没有使用指定id的元素,那么将识别第一个名字与指定条件相符的元素。

identifier=user-login-form;//定位form

identifier=edit-name;//定位name

identifier=edit-pass;//定位pass

2.id定位

这种定位方式比identifier定位范围更窄,但比较具体,如果知道元素id特征,就是用这种方式:

id=user-login-form;//定位页面元素form

3.name定位

名称定位方式将会识别第一个匹配名称属性的UI元素,如果多个元素拥有相同的名称属性,可以使用过滤器进一步优化你的定位策略。默认的过滤器是Value:

name=name;//定位页面元素为name

name=pass;//定位页面元素为name

如果同时又text和button的名称都为pass,此时通过value及其他属性过滤:

name=pass value=secret;

name=pass type=button;

以上三种定位器是不依赖UI页面的,即使页面结构发生变化也是可以正常测试的,所以比较重要。

4.XPath定位

XPath是一种在XML文档中定位元素的语言。因为HTML可以看做XML的一种实现,所以Selenium用户可使用这种强大的语言在web应用中定位元素。XPath扩展了上面id和name定位方式,提供了很多种可能性,比如定位页面上的第三个元素。

xpath=/html/body/form[1];//绝对路径(html的任何轻微改变都会导致失败)

//form[1];//HTML中的第三个form元素

xpath=//form[@id='user-login-form'];//id为user-login-form的元素

//input[@name='name'];  //input元素name

//form[@id='user-login-form']/input[1];  /针对id为user-login-form,定位它的第一个input元素

//input[@name='pass'][@type='button'];  //name为pass,type为button的input

//form[@id='user-login-form']/input[4];  //id为user-login-form的form,定位它的第四个input元素

Firefox插件,可以帮助你获取页面元素的XPath:

XPath Checker         Firebug

这里比较重要的一个功能就是Firebug的获取XPath:1.打开Firebug选择元素;2.右击选择复制XPath.

5.通过超链接定位

Document Object Model 被用于描述HTML文档,可以使用javascript来访问。该定位策略通过javascript评估页面上的元素,可以使用分级符号来简化元素定位。注:因为DOM定位以"document"开始,所以“dom=”标签并不是必须的。

 

dom=document.getElementById('user-login-form');  //定位元素form

dom=document.forms['user-login-form'];   //定位元素form

dom=document.forms[0];  //定位元素form

document.forms[0].name;   //定位元素name

document.forms[0].elements[3];  //定位form的第四个元素

7.CSS定位

CSS(Cascading Style Sheets)是一种语言,它被用来描述HTML和XML文档的表现。CSS使用选择器来为页面元素绑定属性。这些选择器可以被Selenium用作另外的定位策略。

css=form#user-login-form   //定位页面元素form

css=input[name="name"]   //定位页面元素name

css=input.required[type="text"]  定位页面元素,类型为text

css=input.passfield   定位页面元素,类型为password

css=#user-login-form input[type="button"]  定位页面元素,类型为button

css=#user-login-form input"nth-child(2)   定位页面元素passfield,为form的第二个input子元素

posted @ 2013-10-08 16:13  LVAnny  阅读(450)  评论(0编辑  收藏  举报