定位页面元素
对于很多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">
这是一种普遍的定位方式,当不能识别为其它定位方式后,默认为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子元素