TA的每日心情 | 奋斗 2014-12-23 16:54 |
---|
签到天数: 6 天 连续签到: 1 天 [LV.2]测试排长
|
不知道你的具体问题,给你全部的定位方法,你自己看看吧,css和XPath应该可以。
(1)验证页面元素:
verifyTextPresent:
验证页面是否有特定文本,不关心其所在位置;
verifyText:
验证页面的某个位置(Target),是否存在某特定文本;(选择XPath、DOM)
verifyElementPresent:
测试特定UI元素是否存在某位置,不关心其内容;仅检查HTML tag;
(2)定位页面元素:
locatorType=location,locatorType可以省略;
定位器以document开始,使用DOM定位策略;
定位器以//开始,使用XPath定位策略;
定位器没有以locatorType开头,默认使用identifier定位策略;
identifier定位:
默认为identifier定位,识别第一个使用指定id的页面元素,若没有,则识别第一个名字与指定条件相符的元素;
id定位:
比identifier定位范围更窄,更具体,需要知道元素的id特征;
name定位:
识别第一个匹配名称属性的UI元素,如果同名,使用过滤器(默认Value);
--!!!以上3种定位器使selenium不需要依赖UI元素在页面上的位置来进行测试。
XPath定位:
在XML文档中定位元素,扩展了id和name定位,比如定位页面上的第3个多选框;
用相对于有id和name的元素的相对地址来定位较好,绝对XPath包含从root(/html)开始的路径,不利于复用;
XPath定位以“//”开始,xpath的标签并非是必需的;
例如://form[@id='loginForm']/input[4][7]——id为‘loginForm’的form,定位它的第4个input元素。
在FireFox中添加XPath Checker、FireBug附加组件;
通过链接文字定位超链接Link:
例如:link=Continue(4)——定位页面元素连接文字为Continue。
DOM定位:
document object model使用JavaScript评估元素,用分级符号来简化元素定位;
只有dom定位以document开始,所以“dom=”标签不是必需的;
例如:
dom=document.getElementById('loginForm')(3)——定位页面元素form;
dom=document.forms[0](3)——定位页面元素form;
document.forms[0].elements[3](7)——定位continue,它是form的第三个元素;
CSS定位:
cascading style sheet表现HTML和XML,使用选择器来为页面元素绑定式样属性,可被selenium用作定位策略;
例如:
css=form#loginForm(3)——定位页面元素form;
css=input[name='username'](4)——定位页面元素username;
css=#loginForm input[type="button"](4)——定位页面元素,类型为button;
css=#loginForm input:nth-child(2)(5)——定位页面元素,且它的form第二个input子元素;
http://www.w3.org/TR/css3-selectors/
(3)文字范本匹配
patterns也是经常被selense命令使用的参数,需要范本的命令包括verifyTextPrstesent,verifyTitle,assertConfirmation,verifyText,verifyPrompt,链接定位器,允许使用特殊字符来描述期望值,有3种类型的范本:globbing、regular expression、Exact。
globbing范本:
在dos或linux系统中作为文件名通配符(*.c),在selenium中,只支持2种特殊符号:
* ——匹配任何东西;
[]——(字符集)匹配任何方括号内的字符,连接符可以被用来缩短穷举字符(ASCII内连续);
例如:
[aeiou]——匹配任何小写元音字母;
[0-9] ——匹配任何数字;
[a-zA-z0-9]——匹配任何字母和数字;
在selenese命令中使用globbing范本,可以加“glob:”前缀,不加也行,因为glob是默认范本;
例如:
Click link=glob:Film*Television Department
VerifyTitle glob:*Film*Television*
regular expressions范本(正则表达式):
功能最强大的,被多种高级语言支持;
例如:
要确保特定表格单元中仅包含有数字,regexp:[0-9]+ ——是一个简单范本,可以匹配任何长度的十进制数。
支持JavaScript的所有特殊字符;如下:
. 任何字符 -anyAll
[] 字符集,匹配括号中的任何字符 -charClass
* 0个或更多之前描述的字符或字符串 -quantifier (.*表示0个或多个任意字符)
+ 0个或更多之前描述的字符或字符串 -quantifier
? 0个或1个之前描述的字符或字符串 -quantifier
{1,5} 1个或者5个之前描述的字符或字符串-quantifier
| 左边或右边的字符或字符串 -alternation
() 一个整体,与上述结合使用 -grouping
在selenese中,regular expression范本需要加上“regexp:”或者“regexpi:”前缀,后一种大小写不敏感;
[a-g]+ :表示没有或者有a-z的字符;
[0-6]? :表示没有或者有1个0-6的数字;
[0-9]|[a-d] :表示左边是数字,右边是字母;
[已未]完成 :表示已完成或者未完成;
例如:
通配——
click link=regexp:Film.*Television Department (与glob的*效果一样)
veriyTitle regexp:.*Film.*Television.*
复杂的——
open http://weather.yahoo.com/forecast/USAK0012.html
verifyTextPresent regexp:Sunrise: *[0-9]{1,2}:[0-9]{2} [ap]m
说明:
Sunrise: * Sunrise后跟着0个或多个空格;
[0-9]{1,2} 1个或者2个0-9的数字(小时);
: 字符:
[0-9]{2} 2个0-9的数字跟着一个空格;
[ap]m a或者p跟着m;
Exact范本:
很少被使用,完全不使用特殊字符,所以如果需要找到真实的星号字符,就可以使用它了;
例如:
在下拉框选择“Real *”,应该使用“exact:”前缀创建范本,exact:Real * 即可;
select //select exact:Real * (regexp:Real \* --转义后也一样) |
|