selenium IDE经常使用命令

基于selenium2.9.1javascript

三类命令
Action:操做被测应用的状态,如“点击这个link”、“选择这个选项”。若是失败,测试运行中止。 
每个Action“XXX”都对应一个XXXAndWait命令。 
XXXAndWait会告诉selenium这个XXX操做会向服务器发请求,selenium应该等待服务器响应以后再行操做。通常这个响应是新页面的加载。测试Ajax时使用。 
测试时,点击一个页面,出现新的子页面这种,就须要使用。可是selenium IDE不会本身录制到这个命令,须要本身添加“AndWait”。css

Accessors:[中]访问器,读取器。检查、存储应用的状态,如“storeTitle”。也用来自动生成Assertions。每一个Accessors都有对应的6个Assertions:
assertXXX、assertNotXXX
verifyXXX、verifyNotXXX
waitForXXX、waitForNotXXX
Assertions:[中]预言。检查应用状态,确认网页各状态是否与预期一致,如“确认网页的标题是XXX”、”确认checkbox is checked”。Assertions有三类: 
assertXXX,预言失败,测试终止。
verifyXXX,verify失败,测试继续,日志记录,须要本身讲结果写入,case量特别大的时候建议使用这个,而后经过分析日志来检查执行结果。
waitForXXX,等待一些条件变为真,测试Ajax应用时特别有效。若是条件已经知足,不会等待,直接经过,若是失败,中断测试。等待时间由setTimeout来设置,等待时间超时,测试中断。
命令形式
|command|target|value| 
这里写图片描述 
target: Element Locator pattern不少命令参数写的是’pattern‘,在Accessors尤为多。它用于指定输入值、识别一个特定的选项。它支持多种模式,包含JS实现版本的正则表达式。html

string-match patterns
glob:全局定位符:*(任何字符)、?(单个字符)。默认
regexp:JS 版本的正则表达式
regexpi:case-insensitive,大小写敏感的
exact:精准匹配
使用时,在参数前加相应前缀便可:regexp:^[0-9]a 
若是返回值有多个(有些命令有多个返回值,好比:verifySelectOptions),那返回的字符串长这样的:returnValue1;returnValue2;…; 用分号分隔开的。若是returnValue1里面包含’;’和’\’,系统会作相应的处理。java

元素定位器
定位器通用语法: 
locatorType=argument 
分类叙述: 
1. identifier='id':id属性,若是没有找到id属性,就找第一个name属性为’id‘的元素。 
2. id='id': id属性 
3. name='name':name属性。遇到有两个以上元素都符合筛选条件时,只选取第一个。使用方法:node

username:直接等号后面的部分,如图 
这里写图片描述
name=username:明确表示是name定位器
name属性方法定位时,其表达式后面可能会有一个或多个的其余元素过滤表达式(element-filters), 用空格分开。若是没有指定这个* filterType*,那么后面就是跟的就是value。web

name=flavour value=chocolate
name=flavour chocolate,没有指定filterType
name=flavour filterType(其余过滤表达方式)
4.dom='javascriptExpression': 经过JS表达式来定位。JS代码的方式容许你遍历HTML DOM对象自由操做。参考JS DOM操做方式(W3School)。ajax

dom=document.forms[‘myForm’].myDropdown
dom=document.images[56]
dom=function foo() { return document.links[1]; }; foo();随意的JS代码,注意到最后一句不要返回什么值,直接把要赋的值写在最后一行便可,如本例,最后只有一句“foo();”
5.xpath='xpathExpression':都用”//”开头,不用写“xpath=”前缀也可正则表达式

xpath=//img[@alt=’The image alt text’]
xpath=//table[@id=’table1’]//tr[4]/td[2]
xpath=//a[contains(@href,’#id1’)]
xpath=//a[contains(@href,’#id1’)]/@class
xpath=(//table[@class=’stylee’])//th[text()=’theHeaderText’]/../td
xpath=//input[@name=’name2’ and @value=’yes’]
xpath=//*[text()=”right”]
6.link='textPattern':link anchor,对应HTML<a>标签。注意里面是txt 模式哦,可使用正则的哦。 
7.css='cssSelectorSyntax':css定位器,查看w3网站。你还能够在selenium测试套件里的示例(TestCssLocators)中去查看使用方法,须要到下载的selenium core package里面查看,在selenium开源代码里。express

css=a[href=”#id3”]
css=span#firstChild + span
如今CSS定位器支持全部版本的CSS(CSS一、CSS二、CSS3)
但有如下部分不支持:CSS3版本里面的namespace; 一部分pseudo classes(:nth-of-type, :nth-last-of-type, :first-of-type, :last-of-type, :only-of-type, :visited, :hover, :active, :focus, :indeterminate) ;一部分pseudo elements(::first-line, ::first-letter, ::selection, ::before, ::after).
8.ui='uiSpecifierString'这个ui指的是采用selenium UI-Element的架构方法定义的UI元素。至于它是什么,现可直接将其理解为自定义的(元素)对象,经过扩展的js文件定义。canvas

ui=loginPages::loginButton() ;这里定义的页面对象是loginPages,loginButton是他的元素对象。
ui=settingsPages::toggle(label=Hide Email)
ui=forumPages::postBody(index=2)//a[2]
若是没有’=’号前面的xpath,css等字符来明显说明定位方式,采用如下默认策略:

dom: document开头就能够
xpath:”//”开头
identifiier: 直接写取值就能够
其余项必需要显示地指明其定位方式
Element Filters
用更多的过滤条件来定位候选元素。现阶段只支持“name”定位器。 
语法和定位器没有什么区别: 
filterType = argument

现阶段支持的过滤类型有:

value=valuePattern:用value值来过滤,定位一系列名称类似的按键时特别有用
index=index:基于其在列表的位置选择元素
命令分类

操做浏览器的:close,goBack ,createCookie ,deleteAllVisibleCookies ,deleteCookie ,goBack ,open ,openWindow ,selectWindow,deselectPopUp ,setBrowserLogLevel ,waitForFrameToLoad ,waitForPageToLoad ,waitForPopUp ,windowFocus ,windowMaximize ,storeAllWindowIds ,storeAllWindowNames ,storeAllWindowTitles ,storeCookie ,storeCookieByName ,storeCookiePresent ,storeTitle(单个页面),storeWhetherThisWindowMatchWindowExpression (浏览器窗口)
操做键盘的:altKeyDown ,altKeyUp ,controlKeyDown ,controlKeyUp ,keyDown,keyPress ,keyUp ,metaKeyDown ,shiftKeyDown ,shiftKeyUp
操做HTML 元素的
通用:assignId,storeAttribute ,storeAttributeFromAllWindows , storeBodyText ,storeElementHeight ,storeElementIndex ,storeElementPositionLeft ,storeElementPositionTop ,storeElementWidth ,storeHtmlSource ,storeText,storeValue ,storeXpathCount ,storeElementPresent ,storeOrdered ,storeTextPresent ,storeVisible
frame元素:storeWhetherThisFrameMatchFrameExpression
下拉元素drop-down/select element:select,storeSelectedId ,storeSelectedIndex ,storeSelectedLabel ,storeSelectedValue,storeSomethingSelected
多选元素multi-selection:addSelection,removeSelection ,storeSelectedIds,storeSelectedLabels,storeSelectedValues,storeSelectOptions
button:storeAllButtons
filed:storeAllFields
link:storeAllLinks
toggle-button (checkbox/radio):check,uncheck ,storeChecked
表格form:submit
table元素:storeTable
右键会出现菜单的元素:contextMenu,contextMenuAt
link,button,checkbox,radio:click,clickAt , doubleClick , doubleClickAt
input,combo box,checkbox:type
input:storeEditable
动态UI元素:typeKeys
操做鼠标的(除去左键click):dragAndDrop , dragAndDropToObject ,mouseDown ,mouseDownRight ,mouseDownRightAt ,mouseMoveAt ,mouseOut ,mouseOver ,mouseUp,mouseUpAt ,mouseUpRight ,mouseUpRightAt,setCursorPosition ,setMouseSpeed ,storeCursorPosition

操做 pop-ups的:answerOnNextPrompt , chooseCancelOnNextConfirmation ,chooseOkOnNextConfirmation,storeAlert ,storeConfirmation ,storePrompt ,storeAlertPresent ,storeConfirmationPresent ,storePromptPresent
操做通知消息的:assertErrorOnNext ,assertFailureOnNext ,
直接操做JS代码的 addScript,removeScript,runScript,storeEval,store ,waitForCondition ,storeExpression
浏览器兼容相关:allowNativeXpath ,storeAttribute ,storeCursorPosition
自定义:addLocationStrategy
其余 
break ,captureEntirePageScreenshot ,echo ,fireEvent ,focus ,highlight ,ignoreAttributesWithoutValue ,setSpeed ,useXpathLibrary ,storeSpeed
selenium Actions


addLocationStrategy ( strategyName,functionDefinition ) 
自定义页面定位元素的函数。 
使用示例: 
addLocationStrategy ( foo,functionDefinition ) 
click(“foo=blah”) 
foo是定义的策略,blah的做为string参数被传入,blah应该是定位的关键字。这时候一共会传入三个参数: 
- locator:定位关键字,用户传入的string参数。示例中blah。 
- inWindow:当前选择的窗口 
- inDocument:当前选择的DOM对象

参数: 
- strategyName:定位策略的名称,only letters [a-zA-Z] 
- functionDefinition:JS代码

addScript ( scriptContent,scriptTagId ) 
在selenium文件里加载一段scriptContent到一个新的脚本tag中,应该是用脚本TagId来指代一段代码。类似但区别于runScript:不是将Tag加在Selenium文档而是AUT文档。在scriptContent里实体用 
<scriptTagId> 指代。 
参数: 
- scriptContent:被加入的JS内容 
- scriptTagId: 可选项,新的脚本tag,若是指定了且元素的id已经存在了,操做失败。

removeScript ( scriptTagId )

runScript ( script ) 
在当前的测试窗口创建一个新的脚本Tag,并在命令中加入特定的文本。这种方式比getEval命令要好调试。这种JS代码甩出的异常selenium不会处理,须要本身在脚本加上try/catch。 
getEval命令可能已弃用了,现存命令storeEval,在Assertion一节。

addSelection ( locator,optionLocator ) 
在多选元素(multi-select element)中,新增一个已选项。参考doSelect查看选项定位的细节。 
这个doSelect是什么: 
1. JS Select事件?好像不是很符合,原文“触发、或将函数绑定到指定元素的 select 事件;当 textarea 或文本类型的 input 元素中的文本被选择时,会发生 select 事件”,是用来定义此事件发生后,如何处理时使用。 
2. HMTL对象select标签?,不是很符合。HMTL说他是下拉列表选项。找到一个HTML DOM options 集合, HTML dom 对象select的对象集合? 
3. 是select() selenium IDE的函数,为何要前缀do?见“添加Actions”一节。

参数: 
- locator:识别出多选框的元素定位器。以后的这个参数都没写。 
- optionLocator: 选项定位器,默认是经过label定位。lable含义键select 命令解释。

removeSelection ( locator,optionLocator )

select ( selectLocator,optionLocator ) 
使用选项定位器从一个下拉选项元素中选择一个选项。

选项定位器: 
- label=labelPattern:默认, lable的定义,没说得彻底清楚,举了一个例子: visibel text 
- label=regexp:^[Oo]ther

value=valuePattern:也不太清楚value的定义,多是value属性吧
id=id: 选项的id
index=index:从0开始计数: 
index=0,第一个选项
参数: 
- selectLocator:元素定位器,元素必须是下拉菜单元素 
- optionLocator:略

下拉drop-down元素有: 
<select>

allowNativeXpath ( allow ) 
allow为真,若是浏览器存在的话,容许使用浏览器内置原生实现版本XPath。为假,对应的是pure-JavaScript xpath library。后者兼容性好一些,可是要慢一些。

参数: 
- allow: 布尔量

assignId ( locator,identifier ) 
暂时赋予元素id,在后来的测试中,就能够经过id来而不是用慢的/复杂的xpath来定位。page一旦从新下载,那么id就会失效。

altKeyDown ( ) 
按下alt键,直到doAltUp()被调用或者是新的页面下载完毕。

altKeyUp ( ) 
释放alt键

controlKeyDown ( ) 
按住control键,直到doControlUp()被调用或者新页面下载完毕

controlKeyUp ( )

break ( ) 
暂停如今的测试,直到用户按下continue按钮(debug处),debug的时候用

captureEntirePageScreenshot ( filename,kwargs ) 
保存内容:current window canvas 
保存文件格式: PNG 
只能在如下两种状况使用: 
- FF/FireFox在Chrome模式运行时,FF实现版借用Screengrab,它是FF的扩展。 
- in IE non-HTA using the EXPERIMENTAL Snapsie utility.

类似命令有captureScreenshot(保存内容为 OS viewport,仅在RC模式实现,IDE没有此命令)

参数: 
- filename:存储的文件路径。默认无后缀。若是路径不存在,会抛出异常 
- kwargs:修改截图信息,现有有效的信息: 
- “background=#CCFFDD”:修改HTML文档中CSS的背景。缘由:在非理想状态下的布局截图可能会出现异常,如绝对定位会使Canvas维度计算失败,截图会呈现黑色背景,可能会看不到黑色的字。

check ( locator ) 
勾选元素 
针对元素:checkbox、radio

uncheck ( locator ) 
对应check命令,取消勾选元素:checkbox or radio

answerOnNextPrompt ( answer ) 
下一次JS prompt出现时,指示selenium返回特定的答案。 
JSprompt长这样:window.prompt()

参数: 
- answer:要返回的消息

chooseCancelOnNextConfirmation ( ) 
下一次肯定框出现时,选择“取消”键。 
针对对象:window.confirm() 
默认状况下,selenium遇到window.confirm()函数会返回ture,至关于人手动点击OK。若是要选择“取消”键,就要用此命令显示地写出来,若是有不少条,那每条都要显示地写出来。 
每一次一个确认框起来了,你必须用getConfirmation去处理它,否则下一步操做会失败。在selenium IDE中,采用这个命令就至关于用getConfirmation去处理了。

chooseOkOnNextConfirmation ( ) 
取消chooseCancelOnNextConfirmation的效果。 
其实没必要特地写这条命令,除非在特殊状况下你想提早指示好确认框的选项。

click(locator) 
点击某元素。 
适用对象:link,button,checkbox,radio。因此说check没什么卵用。若是操做致使了新页面下载,要用waitForPageToLoad处理。

clickAt ( locator,coordString ) 
点击元素旁边的某个元素(link,button,checkbox,radio)。有些元素很差用locator定位,就定位它旁边的元素,再经过相对位置去定位。

参数: 
- coordString:相对于locator的相对位置,如(-10,20)。虽然没有说明,应该是向左向下为正?

doubleClick ( locator ) 
双击元素 
支持对象:link, button, checkbox or radio。若是操做致使了新页面下载:waitForPageToLoad

doubleClickAt ( locator,coordString ) 
双击对象

close() 
点击关闭按钮 
适用对象:titlebar of a popup window or tab

goBack ( ) 
点击浏览器back按钮

contextMenu(locator) 
模拟打开context menu。有些元素用户“右键点击”时会出现菜单。这个命令就模拟打开这个菜单。

contextMenuAt ( locator,coordString ) 
操做元素旁边的某个地方。有些元素很差用locator定位,就定位它旁边的元素,再经过相对位置去定位。

createCookie ( nameValuePair,optionsString ) 
建立一个cookie。path和domain两个参数值必须和如今的正在测试页面同样,除非你显示地指定了path的值。

参数: 
- nameValuePair:格式 “name=value” 
- optionsString:options for the cookie。 
如今支持:’path’, ‘max_age’ and ‘domain’。 
格式是:”path=/path/, max_age=60, domain=.foo.com”。与顺序无关,max_age的单位是秒。若是domain不是当前domain的子集的话,建立会失败。

nameValuePair    optionsString
cookie_name=cookie_value    path=/path/, max_age=60, domain=.foo.com
deleteAllVisibleCookies ( ) 
删除当前页面全部的可见的cookie,内在逻辑是参数设置“recurse=true”时调用deleteCookie函数。这个方式比“known domain/path”的deleteCookie 方式慢。

deleteCookie ( name,optionsString ) 
经过指定domain/path来删除cookie。须要使用确切的、用来建立cookie时使用的path和domain。否则就会失败,还有若是domain不是当前domain的子集的话,操做会失败。实际上,不可能获取到特定cookie当前实时的源path和dormain,因此就加了recurse的方法,就是deleteAllVisibleCookies ,想当慢,O(n*m)的时间消耗,n是domain name的总个数,m是path里面反斜杠的个数。

参数: 
- name:cookie的名字, “name=value”中的name 
- optionsString:options for the cookie。 
如今支持:’path’, ‘domain’ and ‘recurse。 
格式是:”path=/path/, domain=.foo.com, recurse=true”。与顺序无关,max_age的单位是秒。若是domain不是当前domain的子集的话,建立会失败。

dragAndDrop ( locator,movementsString ) 
拖拽必定的距离

参数: 
- locator:元素定位器 
- movementsString:相对于当前元素的偏移位置:“+70,-300”

dragAndDropToObject ( locatorOfObjectToBeDragged,locatorOfDragDestinationObject ) 
拖拽一个元素,把他放到另外一个元素之上。一般是放在目标元素的中心。

参数: 
-locatorOfObjectToBeDragged:元素定位器 
-locatorOfDragDestinationObject :元素定位器

echo ( message ) 
在log面板上打印信息。debug时颇有用。

参数: 
- message :要打印的信息。字符串和${变量名}均可以。

fireEvent ( locator,eventName ) 
在元素上发起事件。事件名称是onXXX的XXX。具体元素有哪些事件可fire,须要查看对应的标签文档,或者是查看浏览器的debug信息栏的内容。

参数: 
- eventName:the event name, e.g. “focus” or “blur”

focus ( locator ) 
将焦点移到特定元素上。若是这个元素是input element,那么就是把输入光标移过去。

highlight ( locator ) 
高亮某个元素,debug用

ignoreAttributesWithoutValue ( ignore ) 
清楚地说明selenium是否应该忽略掉无值的xpath属性,好比空字符串( when using the non-native xpath evaluation engine)。 
在IE浏览器中考虑到性能时,你可能须要采起此措施。这个命令会破坏掉一些特定的xpath,好比其余定位到属性(属性值不为空字符串)的XPath,不太清楚为啥会影响到。惟一但愿的是,这种xpath相对来讲比较少,可是用户至少应该有权选择是否使用这些xpath。注意,这个只影响那些使用ajaxslt engine(非javascript-xpath)的xpath。

参数: 
- ignore ,布尔值,为真,意味着问会以正确性为代价来忽略无值属性。为假,意味着为正确性来牺牲速度。

keyDown ( locator,keySequence ) 
模拟用户按压一个键,不释放

参数: 
- keySequence: 输入的键盘序列,用”\”标记,后面是键盘的数字“键盘码” ,一般是此键盘值的ASCII值。若是是单个字母,直接输入便可: “w”, “\119”。

keyPress ( locator,keySequence ) 
模拟用户按压一个键,要释放

keyUp ( locator,keySequence ) 
模拟用户释放一个键,与keyDown组合起来使用

metaKeyDown ( ) 
按下meta键,直到dometaUp()被调用或者新页面下载完毕

metaKeyUp ( ) 
模拟用户释放meta键

shiftKeyDown ( ) 
模拟按下shift键,等到调用函数doShiftUp()或者新的页面被加载

shiftKeyUp ( )

mouseDown ( locator ) 
鼠标左键,不释放 
至今为止没有get到正确用法

mouseDownAt ( locator,coordString ) 
按下鼠标左键,不释放,相对于某一元素的位置

mouseDownRight ( locator ) 
按下鼠标右键,不释放

mouseDownRightAt ( locator,coordString ) 
按下鼠标右键,不释放,相对于某一元素的位置

mouseMoveAt ( locator,coordString ) 
模拟按下鼠标拖动 ,不释放,从元素的位置拖动到指定的相对位置

mouseOut ( locator ) 
将鼠标从某个元素移开

mouseOver ( locator ) 
移到某个元素上面

mouseUp ( locator ) 
用户释放鼠标键

mouseUpAt ( locator,coordString )

mouseUpRight ( locator ) 
释放鼠标右键

mouseUpRightAt ( locator,coordString )

open ( url ) 
模拟在测试frame中打开指定URL。此URL能够是绝对或者相对URLs。open命令会打开网页并等待其下载完毕,有一个隐形的“AndWait”后缀。因为浏览器的安全政策(相同的源策略),URL打开须要是在同一个domain下。若是须要打开另一个,那么须要使用selenium sever打开一个新的浏览器session。

参数: 
- url :须要打开的URL,能够是相对的,也能够是绝对的。

openWindow ( url,windowID ) 
打开一个popup 浏览器窗口,若是此ID的窗口尚未被打开。打开了以后,若是要在此窗口中操做,须要使用selectWindow命令。

用此命令去走查 bug SEL-339。在有些时候,selenium会截取不到window.open的调用,好比此时的调用发生在onload事件之间或者以前。这个时候的解决方法就是强制打开一个窗口:openWindow(“”, “myFunnyWindow”),此时url为blank,后面的是窗口的名字。

参数: 
- windowID : 要选择的JS 窗口ID。这个意义是,这个窗口ID在JS层面上是有意义的。

selectWindow(windowID) 
选择一个弹出窗口。一旦被选择,之后命令在此窗口中执行,若是要选择主窗口,windowID=null便可。

几种形式的Window Locators 
- title=My Special Window:title对应在网页的title bar出现的文字text。应当要注意,有可能会有两个窗口共享一个名称。若是发生了,定位器只会定位其中的一个。 
- name=myWindow:对应JavaScript method window.open(url, windowName, windowFeatures, replaceFlag)的第二个参数,经过内部JS “name”属性去定位window 
- var=variableName:一些弹出的匿名/无名窗口,可能在当前与JS变量名相对应。好比说以前使用过:“window.foo = window.open(url)”,这种时候可使用变量名定位窗口的方法,变量名为foo。

若是没法准确知道Window Locator,下面有几项原则能够利用: 
1. 源窗口:windowID 就是null/string null 
2. JS window.open()的返回值:windowID 是 JS 变量名 
3. 其余状况,selenium会去查询一个hash表,这个表保存字符串和window name的映射(map)关系 
4. 若是失败了,会遍历全部的已知窗口来找到一个合适的“title”,因为title不是惟一的,颇有可能会出现未知错误

name=myWindow: 
这里写图片描述 
X就是window的ID,在执行openWindow命令时赋给窗口的。 
若是你对如何查看window的名称有疑问的话,能够查看selenium的日志消息,里面有经过window.open()建立的windows的名称。如下为日志消息示例: 
debug: window.open call intercepted; window ID (which you can use with selectWindow()) is “myNewWindow”

实际我以 openWindow|web|空|的方式去打开的提示 
这里写图片描述 
把log级别调到debug级别:出现了 
这里写图片描述

在某些状况下,selenium可能截取不到window.open的名称,好比说事件调用发生在“onLoad”时间以前或者之间(前面提到的bug SEL-339)。在这些状况下,你须要经过openWindow命令来强制性地通知selenium的名称,此时url应设置为空:openWindow(“”, “myFunnyWindow”)

deselectPopUp ( ) 
选择主窗口。等效于 selectWindow() windowID=null。

setBrowserLogLevel ( logLevel ) 
设置浏览器的日志级别 
设置日志级别:”debug”, “info”, “warn”, “error” or “off”。 
如何查看日志:GUI模式在日志窗口查看,或者在RC模式enable browser-side logging(应该是浏览器侧查看)

参数: 
- logLevel:”debug”, “info”, “warn”, “error” or “off”

setCursorPosition ( locator,position ) 
设定text cursor到特定位置 
位置指向:input element or textarea,若是不是这两种元素,命令可能会失败

参数: 
- locator:位置指向,input element or textarea 
- position:in the field(应该是input or textarea的整个可操做空间)的数值型位置。为0,在field的开始位置;-1,在field结束的位置。应该是从左到右算开始和结束

setMouseSpeed ( pixels ) 
设置在dragAndDrop命令中”mousemove” events的鼠标的移动速度(按pixel计算,默认为10)。也就是在此命令中mousemove事件的间隔pixel:移动多少pixel,发起一次这个”mousemove” 事件。 
pixel为0时,在开始位置和结束位置中间每移动一个pixel都会发起一次”mousemove” events,这样确定就会很慢,有可能会致使一些浏览器强制性使JS代码超时。 
若是此速度大于了起始点的距离(怪怪的,先这么理解吧),那么在起始位置之间(拖拽命令时)就只发起一次事件。

setSpeed ( value ) 
设定selenium操做的执行速度,好比在命令之间插入固定XXms。默认,无此时间,为0ms。

参数: 
- value:操做之间的固定暂停时间,以毫秒ms计

setTimeout ( timeout ) 
告诉Selenium等待actions的超时时间,默认为30s。 
这些action有:open、waitForXXX

参数: 
- timeout:超时时间,以毫秒ms计。此时间以后,action会返回错误。

store ( expression,variableName ) 
与storeExpression同义(synonym)

参数: 
- expression:要存储的value。能够把计算式当作要赋的值,jS计算式或者JS代码段。 
- variableName:变量名

submit ( formLocator ) 
操做UI类的 
提交特定的form,好比:只有单个输入的 “Search” forms,这种没有submit按钮的表格,这种表格通常会把提交绑定到enter键上面。

参数: 
- formLocator :表格元素的定位器

type ( locator,value ) 
操做UI类的 
若是是input field:模拟给输入框打字;若是是comboboxes, checkboxes,值应该是option的值,而不是可见的text(参见option selected)

参数: 
- value:官方文档写的须要写入的内容。不知道做option时应该怎么作。

typeKeys ( locator,value ) 
模拟在特定元素上键盘敲击事件,一个键一个键地输入。 
相比于type ( locator,value )此命令会在敲击的字母之间调用keyDown, keyUp, keyPress这些事件。举个例子:测试对象是动态UI widget时,好比auto-completing combo boxes,这种须要显示地(explicit)键盘事件,使用typeKeys 就会方便不少。 
不像是type命令,会强制性将值填入页面,这些命令可能会/不会有明显的效果。有些时候typeKeys 命令也不会有明显效果:好比在一个form元素上使用,你就看不到type效果。

在某些状况,你可能须要type按钮设置field的值,而后再用本命令来发送键盘敲击事件。

useXpathLibrary ( libraryName ) 
容许使用xpath库

参数: 
- libraryName :有如下选项 
- “ajaxslt”:Google’s 库 
- “javascript-xpath”:Cybozu Labs’ faster library 
- “default” - 默认库:现目前为止是 “ajaxslt” . 
- 若是没有使用以上三种,那么就不生效,使用默认的

waitForCondition ( script,timeout ) 
script: JavaScript snippet,[中]JS代码片断。 
此命令是重复的运行指定的JS代码片断直到代码返回true或者时间超时。命令能够有多行,只有最后一行的结果(true or false)才会被考虑。 
要注意的是,代码是在runner’s test的窗口中执行,而不是被测应用的窗口。为了获取你应用的window,须要使用如下代码片断:

selenium.browserbot.getCurrentWindow()
1
这样就能够在应用窗口中执行了

waitForFrameToLoad ( frameAddress,timeout ) 
等待一个新frame被加载 
Selenium会不间断地保持新页面和frame的加载,并在页面加载完成后设置“newPageLoaded”的状态字。 
参考waitForPageToLoad获取更多信息。

参数: 
- frameAddress:在服务器端的frame地址

waitForPageToLoad ( timeout ) 
等待一个新页面加载完毕。 
可使用这个命令替代“XXXAndWait”命令。 
Selenium会不间断地保持新页面和frame的加载,并在页面加载完成后设置“newPageLoaded”的状态字。。以后执行其余selenium命令后会将这个状态字翻转。因此你想使用此命令,应该将此命令紧跟着放在“会引发页面加载的命令”以后。

waitForPopUp ( windowID,timeout ) 
等待一个窗口弹起显示并加载完成。

windowID:若是没有指定窗口的名称(或者指定为了null)的话,那么日志中就会出现JS window “name” 。可是若是你是在操做多个窗口的话,仍是要指定好窗口名称。这个命令会一直等待等到第一个非顶层(non-top)窗口显示。
timeout:若是没有设置这个值,用默认的超时时间,参考setTimeout()命令,当前写的是30s。
windowFocus ( ) 
聚焦在当前选择的窗口

windowMaximize ( ) 
最大化窗口。窗口是当前选择的窗口,最大化是最大化到铺满当前屏幕。毕竟屏幕要自适应。

rollup( rollupName,kwargs ) 
执行此命令,能够将一系列的命令组合起来使用单个名字,能够用kwargs来决定选取其中的哪些命令。若是其中一个命令失败了,此命令失败。

参数 
- rollupname:命令组合使用的名称 
- kwargs:影响选取命令的参数

参看UI-element查看如何内在逻辑

Selenium Accessors
[中]访问器,读取器。检查应用的状态,存储变量结果,如“storeTitle”。也用来自动生成Assertions

每一个Accessors都有对应的6个Assertions: 
- assertXXX、assertNotXXX 
- verifyXXX、verifyNotXXX 
- waitForXXX、waitForNotXXX

assertErrorOnNext ( message ) 
告诉Selenium在下一次命令执行时应该有一个错误生成。

参数: 
- message :应该生成的错误消息。若是不是这个错误信息,那么此命令会fail。

相关命令: 
- assertNotErrorOnNext ( message ) 
- verifyErrorOnNext ( message ) 
- verifyNotErrorOnNext ( message ) 
- waitForErrorOnNext ( message ) 
- waitForNotErrorOnNext ( message )

assertFailureOnNext ( message )

相关命令: 
- assertNotFailureOnNext ( message ) 
- verifyFailureOnNext ( message ) 
- verifyNotFailureOnNext ( message ) 
- waitForFailureOnNext ( message ) 
- waitForNotFailureOnNext ( message )

assertSelected ( selectLocator,optionLocator ) 
弃用

storeAlert ( variableName ) 
将上个命令产生的JS Alert(HTML原生的)消息保存下来,若是没有alerts就此命令执行会失败。 
获取alert和手动点击OK键有相同效果(点击不OK/取消是要设置的),若是alert生成,可是你没有用getAlert去获取,那么下一次action就会失败。 
在Selenium的运行下,JS不会显示地弹出窗口,可是能够经过代码操做。 
Selenium不支持在onload()事件的处理器中(handler)产生的JS alerts。在这种状况下,一个显示地窗口会产生,Selenium会暂停测试直到人为的点击了OK。

返回量: 
- 最新JS alerts的消息

storeConfirmation ( variableName ) 
confirmation:[中]肯定。 
将上个命令产生JS肯定窗口的消息保存下来。默认状况下,这个confirm funtion会产生true,和手动点击OK一个效果。能够经过chooseCancelOnNextConfirmation改变。 
若是产生了肯定弹框,若是没有经过getConfirmation去获取,那么下一次action就会失败。 
在Selenium的运行下,JS不会显示地弹出窗口,可是能够经过代码操做。 
Selenium不支持在onload()事件的处理器中(handler)产生的JS 弹出窗口。在这种状况下,一个显示地窗口会产生,Selenium会暂停直到人为的点击了OK。

返回量: 
- 最新JS 肯定框的消息

storePrompt ( variableName ) 
question prompt:[中]问题提示 
成功处理prompt须要前面answerOnNextPrompt命令的执行,若是prompt产生了,你没有去get/verify,那么下一次selenium操做就会失败。 
在Selenium的运行下,JS不会显示地弹出窗口,可是能够经过代码操做。 
Selenium不支持在onload()事件的处理器中(handler)产生的JS 弹出窗口。在这种状况下,一个显示地窗口会产生,Selenium会暂停直到人为的点击了OK。

返回量: 
- 最新JS 问题提示的消息

storeAllButtons ( variableName ) 
返回页面上全部button的ID 
若是某个button没有ID,那么在数组中的值为“”

返回量: 
- 页面上全部button的ID

storeAllFields ( variableName ) 
返回页面上全部field的ID 
若是某个Field没有ID,那么在数组中的值为“”

返回量: 
- 页面上全部Field的ID

storeAllLinks ( variableName ) 
返回页面上全部Link的ID 
若是某个Link没有ID,那么在数组中的值为“”

返回量: 
- 页面上全部Link的ID

storeAllWindowIds ( variableName ) 
返回页面上全部Window的ID 
若是某个Window没有ID,那么在数组中的值为“”

返回量: 
- 页面上全部浏览器知晓的Window的ID

storeAllWindowNames ( variableName )

storeAllWindowTitles ( variableName )

storeAttribute ( attributeLocator, variableName ) 
获取一个元素属性的值,这个属性值可能会随浏览器不同,好比说style的属性。浏览器兼容性

storeAttributeFromAllWindows ( attributeName, variableName ) 
从全部已知窗口获取JS属性值

storeBodyText ( variableName ) 
存储页面上全部的文字

storeCookie ( variableName ) 
将在测试的当前页面全部的cookie保存下来

storeCookieByName ( name, variableName )

storeCursorPosition ( locator, variableName ) 
获取在指定input元素和textarea的text cursor。注意:不是全部浏览器都支持这个命令。浏览器兼容性 
特别地,若是cursor/selection已经被JS清除了,那么这个命令将会返回cursor上一次的位置(尽管cursor已经不在当前页面了),bug编号SEL-243。

参数: 
- locator:input元素和textarea

返回量: 
- cursor在field的numerical 位置

storeElementHeight ( locator, variableName ) 
获取一个元素的高,以pixel计。

storeElementIndex ( locator, variableName ) 
获取一个元素的index,这个index是相对于他的父元素、且从0开始计数。comment node和empty text node会被忽略掉

storeElementPositionLeft ( locator, variableName ) 
获取一个元素的水平位置,以pixel计,已背景frame作参考。

参数: 
- locator:an element locator pointing to an element OR an element itself

返回量: 
- of pixels from the edge of the frame.

storeElementPositionTop ( locator, variableName ) 
获取一个元素的垂直位置,以pixel计,已背景frame作参考。

storeElementWidth ( locator, variableName )

storeEval ( script, variableName ) 
存储JS代码片断执行后的结果,只保存最后一行的结果 
注意: 片断只会selenium object里执行,因此this指针指的selenium 对象。须要用window来指向应用:

window.document.getElementById('foo')
1
若是须要用定位器指向单独的元素,你能够这样:

this.browserbot.findElement("id=foo")
1
“id=foo”就是你的元素定位器。

storeExpression ( expression, variableName ) 
返回指定的expression 
在JS处理过程当中特别有用。用来生成assertExpression和waitForExpression

参数: 
- expression:要返回的值

返回值: 
- 传入的值

就是将expression(JS)等同于变量名(Selenese)的操做。

storeHtmlSource ( variableName ) 
返回整个HTML源代码:在html开始标签和结束标签之间的全部代码

storeLocation ( variableName ) 
获取当前页面的绝对URL

storeMouseSpeed ( variableName ) 
获取当前的MouseSpeed,拖拽(DragAndDrop)操做的速度

storeSelectedId ( selectLocator, variableName ) 
在特定的select元素中,获取选中选项的ID

参数 
- selectLocator:a drop-down menu定位器

storeSelectedIds ( selectLocator, variableName ) 
在特定的select元素中,获取选中选项的IDs。 
a drop-down menu,but a multi-select element

返回值: 
- 存储选中选项的数组

storeSelectedIndex ( selectLocator, variableName ) 
index:选项的索引值,从0开始计数 
select 元素:a drop-down menu

storeSelectedLabel ( selectLocator, variableName ) 
label: 对用户可见的text 
select 元素:a drop-down menu

storeSelectedLabels ( selectLocator, variableName ) 
a drop-down menu,but a multi-select element

storeSelectedValue ( selectLocator, variableName ) 
获取已选项的值:value attribute 
select 元素:a drop-down menu

storeSelectedValues ( selectLocator, variableName )

storeSelectOptions ( selectLocator, variableName ) 
将drop-down全部选项都返回

storeSpeed ( variableName ) 
selenium命令的执行延时时间,执行速度,以毫秒ms计。

storeTable ( tableCellAddress, variableName ) 
获取table中一个cell的text。 
CellAddress语法:tableLocator.row.column,行列号都从0开始

参数: 
- tableCellAddress:CellAddress,好比,foo.1.4

返回量: 
- 特定cell中的文字

storeText ( locator, variableName ) 
获取元素的text。 
适用元素:任何包含text的元素均可以。 
text-content属性值的内容(Mozilla-like),或者是innerText的内容(IE-like),都是呈现给用户的text的部分。

storeTitle ( variableName ) 
获取当前页面的title

storeValue ( locator, variableName ) 
获取input field(或者其余有value parameter的元素)的value,这个value值会将空格符号删减掉。好比“a B”,获取下来就是“aB”。对于checkbox/radio元素,这个值应该是“on”或者“off”,分别对应这个元素是否被checked。

storeWhetherThisFrameMatchFrameExpression ( currentFrameString, target, variableName ) 
查看这个current/locator的frame是否包含了运行代码。(Determine whether current/locator identify the frame containing this running code)

在proxy injection mode颇有用,这种模式下code会在每一个浏览器的frame和窗口中运行,有时候selenium服务器须要识别当前“current” frame。在这种状况下,test会call**selectFrame**,这时候每一个Frame都会来肯定它是不是当前被选择的selected frame,若是是返回true,反之亦然。

参数: 
- currentFrameString:开始frame 
- target:新frame,相对于当前的frame 
- variableName:存储结果的变量

返回量: 
- 布尔量,这个新frame是不是this code’s window

storeWhetherThisWindowMatchWindowExpression ( currentWindowString, target, variableName ) 
查看当前的currentWindowString plus target识别出window containing this running code。 
一样是proxy injection mode状况下使用,当test calls selectWindow,selenium server会调用每一个窗口去查看是不是 current window/被选中的window。返回布尔量

参数: 
- currentWindowString:starting window 
- target:new window (which might be relative to the current one, e.g., “_parent”) 
- variableName:存储结果的变量

返回量: 
- 布尔量,true if the new window is this code’s window

storeXpathCount ( xpath, variableName ) 
知足特定范式的xpath的节点(node)数量。这里的node是DOM或者CSS的概念。特定范式示例:“//table”, 则此命令会存储table的数量。

参数: 
- xpath:xpath表达式。不要把这个表达式放在count()函数里,selenium会为你作这一步。

返回量: 
-知足特定范式的xpath的节点数量

count()是此命令背后selenium调用的JS函数 
这里写图片描述

storeAlertPresent ( variableName ) 
布尔量,存储是否有告警出现

storeConfirmationPresent ( variableName ) 
布尔量,存储是否有确认框出现

storePromptPresent ( variableName )

storeElementPresent ( locator, variableName ) 
布尔量,存储是否某个元素出现

storeChecked ( locator, variableName ) 
布尔量,whether a toggle-button (checkbox/radio) is checked。若是定位器元素不存在,或者不是toggle-button,此命令会失败

storeCookiePresent ( name, variableName ) 
是否有知足名称的cookie出现

storeEditable ( locator, variableName ) 
元素:input element 
是否能够编辑,或者是被禁用

storeOrdered ( locator1, locator2, variableName ) 
查看两个元素是否在DOM中有相同的父节点且是有顺序的兄弟节点。相同的节点不会被认为是有顺序的。

参数: 
- locator1:元素1 
- locator2:元素2

返回值: 
- 正确顺序是元素1在前,元素2在后

storeSomethingSelected 
元素:drop-down menu 
只要里面有选项被选择,返回真。应该不分多选和单选元素

storeTextPresent ( pattern, variableName ) 
在rendered([中]提供)的页面上是否有知足范式的text

参数: 
- pattern:文本应知足的范式

storeVisible ( locator, variableName ) 
存储一个元素是否可见。元素能够被设置成不见:CSS 中”visibility” 属性值为 “hidden”的时候,或者”display” 属性值为 “none”。若是元素不出现的时候执行此命令会失败。注意,present和visible是两个概念。

Parameter construction and Variables
selenium命令参数variableName有两种方式:简单的变量代替,所有的JS表达式(JS expression)。这两种机制均可以得到以前存储好的变量,只是使用不一样的语法。这两种方式不能混用(variable substitution cannot be combined with javascript evaluation)。

Stored Variables
命令:应该是指全部的store系列命令,它这里写的是store、storeValue、storeText能够存储一些变量备用。在内部实现中,这些变量都存储在一个map中,这个map名叫“storedVars”,变量名和值一一对应,以变量名为键。能够把它想成一个简单的表:

变量名    值
(keys)    (values)
Variable substitution
变量替代法将表达式用变量的形式存储起来,使用${variableName}就能够引用。多个变量也能够这种方式,还能够和静态文本混合起来使用:

命令    target    value
store    Mr    title
storeValue    nameField    surname
store    ${title}${surname}    fullname
type    textElement    Full name is ${fullname}
JS evaluation
这种方式就是使用JS代码来建立命令参数。使用这种机制,整个参数值必需用javascript{...}的形式。括号中间的就是JS expression。而后能够经过store命令将JS表达式存储起来。

命令    target    value
store    javascript{‘xxx’+(new Date()).getTime()}    xxxday
type    textElement    javascript{storedVars[‘xxxday’].toUpperCase()}
这种形式,能够利用JS的函数来使赋值变得灵活。

空格规则
HTML会自动规范元素之间的空格: 
- 忽略掉 leading/trailing 空格; 
- 将多余的空格,tabs,newlines变成一个空格。

当selenium从一个页面读取文本的时候,也会重复这一行为,因此在作assertion的时候就要考虑到这一点,直接按页面展现来进行测试。 
selenium将全部不可见的空格(non-visible whitespace, including the non-breaking space “ ”)都转为一个空格,全部可见的新行标签(<br> <p> <pre>)会保留。 
在selenese自己的HTML版本中也采起一样是空格规则。selenese中新行标签是<td>标签。 
若是要加空格的话,可使用selenese的${space}或者${nbsp},这样的空格不遵照空格规则,也能够叠加。 
XPath不遵照这种空格简化的规则(XPaths do not normalize whitespace the way we do)。

你根据网页直观看到的样子写出来的XPath://div[text()="hello world"] 
网页的HTML版本:"hello&nbsp;world" 
selenese HTML存储的样子://div[text()=&quot;hello world&quot;] 
你应该这样写://div[text()="hello${nbsp}world"] 
最后HMTL存储的样子://div[text()=&quot;hello${nbsp}world&quot;] 
这样才能正确连接到text()=hello world的元素

自定义:Extending Selenium
利用已经写好的JS库来扩展,用JS语言编写。 
你能够添加本身的action,assertion和locator-strategies。 
经过JS语言来编写,遵照JS的基本语法,保存为X.js文件。 
基于Selenium object prototype、PageBot object prototype的对象,在里面添加相应的方法便可。

添加Actions
方法:在Selenium prototype里添加doFoo methods 
selenese调用:Foo做为命令的名称 
在添加dooFoo时,会自动添加一个FooAndWait命令。 
一个函数最多可有两个参数,分别对应|command|target|value|的后两个参数。

Selenium.prototype.doTypeRepeated = function(locator, text) { 

//All locator-strategies are automatically handled by "findElement" 
var element = this.page().findElement(locator); 
//Create the text to type
var valueToType = text + text;
//Replace the element text with the new text 
this.page().replaceText(element, valueToType); };

全部的locator-strategie都自动地被findElement函数自动处理。

添加Accessors/Assertions
方法1:在Selenium prototype里添加doFoo methods 
selenese调用:storeFoo, AssertFoo, verifyFoo, waitForFoo,后面3个(加上xxxNotxxx共6个)。 
一样是2个参数。 
方法2:只定义assertFoo方法,自动生成verify和waitFor

Selenium.prototype.assertValueRepeated = function(locator, text) {
var element = this.page().findElement(locator);
var expectedValue = text + text;
// Get the actual element value 
var actualValue = element.value; 
// Make sure the actual value matches the expected 
Assert.matches(expectedValue, actualValue); };

在selenese可调用assertValueRepeated、verifyValueRepeated、*waitForValueRepeated。

selenium自动为每一个getFoo都生成storeFoo, AssertFoo, verifyFoo, waitForFoo

添加locator-strategies
方法:在PageBot prototype 添加locateElementByFoo方法 
两个参数,第一个是定位字符串(去掉前缀的,XPath前缀,DOM前缀),第二个是被搜索的document

// The "inDocument" is a the document you are searching. 
PageBot.prototype.locateElementByValueRepeated = function(text, inDocument) { 
// Create the text to search for 
var expectedValue = text + text; 
// Loop through all elements, looking for ones that have 
// a value === our expected value 
var allElements = inDocument.getElementsByTagName("*"); 
for (var i = 0; i < allElements.length; i++) { 
var testElement = allElements[i];
if (testElement.value && testElement.value === expectedValue) { return testElement; }
}
return null;
};

user-extensions.js文件
默认状况下,Selenium会去查找一个叫user-extensions.js的文件,下载里面的JS代码。这个文件添加方法如图:不用修改任何selenium核心代码。 
这里写图片描述

在标准版本中,这个文件不存在,用户能够将其扩展放到这个统一位置进行统一管理  

相关文章
相关标签/搜索