seleniumide命令

命令分类

  1. 操作浏览器的:close,goBack ,createCookie ,deleteAllVisibleCookies ,deleteCookie ,goBack ,open ,openWindow ,selectWindow,deselectPopUp ,setBrowserLogLevel ,waitForFrameToLoad ,waitForPageToLoad ,waitForPopUp ,windowFocus ,windowMaximize ,storeAllWindowIds ,storeAllWindowNames ,storeAllWindowTitles ,storeCookie ,storeCookieByName ,storeCookiePresent ,storeTitle(单个页面),storeWhetherThisWindowMatchWindowExpression (浏览器窗口)

  2. 操作键盘的:altKeyDown ,altKeyUp ,controlKeyDown ,controlKeyUp ,keyDown,keyPress ,keyUp ,metaKeyDown ,shiftKeyDown ,shiftKeyUp

  3. 操作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
  4. 操作鼠标的(除去左键click):dragAndDrop , dragAndDropToObject ,mouseDown ,mouseDownRight ,mouseDownRightAt ,mouseMoveAt ,mouseOut ,mouseOver ,mouseUp,mouseUpAt ,mouseUpRight ,mouseUpRightAt,setCursorPosition ,setMouseSpeed ,storeCursorPosition

  5. 操作 pop-ups的:answerOnNextPrompt , chooseCancelOnNextConfirmation ,chooseOkOnNextConfirmation,storeAlert ,storeConfirmation ,storePrompt ,storeAlertPresent ,storeConfirmationPresent ,storePromptPresent

  6. 操作通知消息的:assertErrorOnNext ,assertFailureOnNext ,

  7. 直接操作JS代码的 addScript,removeScript,runScript,storeEval,store ,waitForCondition ,storeExpression

  8. 浏览器兼容相关:allowNativeXpath ,storeAttribute ,storeCursorPosition

  9. 自定义:addLocationStrategy

  10. 其他
    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
[图片上传失败...(image-508b86-1539420106645)]

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|空|的方式去打开的提示
[图片上传失败...(image-30a75b-1539420106645)]

把log级别调到debug级别:出现了
[图片上传失败...(image-e5bb7b-1539420106645)]

在某些情况下,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()

这样就可以在应用窗口中执行了

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')

如果需要用定位器指向单独的元素,你可以这样:

this.browserbot.findElement("id=foo")

“id=foo”就是你的元素定位器。

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

参数:

  • 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会callselectFrame,这时候每个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函数
[图片上传失败...(image-88cdc9-1539420106640)]

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的元素

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • python自动化测试中寻找元素并进行操作,如果在元素好找的情况下,相信大家都可以较熟练地编写用例脚本了,但光进行...
    燕京博士阅读 444评论 0 3
  • 昨天突然想学学 Selenium,就上网查了一些介绍,发现一些教程基本都是比较老版本的了,使用起来略有不便,所以今...
    顾顾314阅读 16,010评论 3 15
  • 这篇文章在介绍官网的同时使用了比较多的脚本示例,示例里遇到的问题有部分在本篇文章进行了解释,还有一篇文章专门记录了...
    顾顾314阅读 12,867评论 3 32
  • 摘要: 之前用Selenium做UI自动化测试从初学到熟练碰到过很多问题,这里就不一一细说了,所以把最基本的操作都...
    Vicky_习惯做唯一阅读 11,326评论 1 23
  • ✔①【南航】9月15日,CZ3017航班经济舱 长沙(CSX)12:15-台北桃园国际机场(TPE)14:50 前...
    你名字里可有个艺啊阅读 907评论 0 0