selenium IDE命令全手册/Selenium reference中文版

selenium IDE命令全手册

  • selenium IDE命令全手册
  • 概念
    • 三类命令
    • 命令形式
    • pattern
    • string-match patterns
    • 元素定位器
    • Element Filters
  • 命令分类
  • selenium Actions
    • Selenium Accessors
  • Parameter construction and Variables
    • Stored Variables
    • Variable substitution
    • JS evaluation
    • 空格规则
  • 自定义Extending Selenium
    • 添加Actions
    • 添加AccessorsAssertions
    • 添加locator-strategies
    • user-extensionsjs文件


基于selenium2.9.1

概念

三类命令

  • Action:操作被测应用的状态,如“点击这个link”、“选择这个选项”。如果失败,测试运行停止。
    每一个Action“XXX”都对应一个XXXAndWait命令。
    XXXAndWait会告诉selenium这个XXX操作会向服务器发请求,selenium应该等待服务器响应之后再行操作。一般这个响应是新页面的加载。测试Ajax时使用。
    测试时,点击一个页面,出现新的子页面这种,就需要使用。但是selenium IDE不会自己录制到这个命令,需要自己添加“AndWait”。

  • 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|
selenium IDE命令全手册/Selenium reference中文版_第1张图片
target: Element Locator

pattern

很多命令参数写的是’pattern‘,在Accessors尤其多。它用于指定输入值、识别一个特定的选项。它支持多种模式,包含JS实现版本的正则表达式

string-match patterns

  • glob:全局定位符:*(任何字符)、?(单个字符)。默认
  • regexp:JS 版本的正则表达式
  • regexpi:case-insensitive,大小写敏感的
  • exact:精准匹配

使用时,在参数前加相应前缀即可:regexp:^[0-9]a
如果返回值有多个(有些命令有多个返回值,比如:verifySelectOptions),那返回的字符串长这样的:returnValue1;returnValue2;…; 用分号分隔开的。如果returnValue1里面包含’;’和’\’,系统会做相应的处理。

元素定位器

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

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

    • name=flavour value=chocolate
    • name=flavour chocolate,没有指定filterType
    • name=flavour filterType(其他过滤表达方式)

4.dom='javascriptExpression': 通过JS表达式来定位。JS代码的方式允许你遍历HTML DOM对象自由操作。参考JS DOM操作方式(W3School)。

  • 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标签。注意里面是txt 模式哦,可以使用正则的哦。
7.css='cssSelectorSyntax':css定位器,查看w3网站。你还可以在selenium测试套件里的示例(TestCssLocators)中去查看使用方法,需要到下载的selenium core package里面查看,在selenium开源代码里。

  • css=a[href=”#id3”]
  • css=span#firstChild + span
  • 现在CSS定位器支持所有版本的CSS(CSS1、CSS2、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文件定义。

  • 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:基于其在列表的位置选择元素

命令分类

  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里实体用
指代。
参数:
- 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元素有: