posts - 1, comments - 0, trackbacks - 0, articles - 0

selenium

Posted on 2006-09-14 00:01 cac 阅读(528) 评论(0)  编辑  收藏

一、           格式

1.      Test Case 格式

Title

命令(Command)

目标(Target)

(Value)

命令(Command)

目标(Target)

( )

判断(Assertion)

期望值(Expected)

实际值(Actual)

 

2.      Test Suites 格式

Title

TestCase1.html

TestCase2.html

TestCase3.html

 

二、           Commands ( 命令)

l        Action

对当前状态进行操作

失败时,停止测试

 

l        Assertion

校验是否有产生正确的值

l        Element Locators

指定HTML中的某元素

l        Patterns

用于模式匹配

 

1.     Element Locators ( 元素定位器)

l        id=id

id locator 指定HTML中的唯一id的元素

 

l        name=name

name locator 指定 HTML中相同name的元素中的第一个元素

 

l        identifier=id

identifier locator 首先查找HTML是否存在该id的元素, 若不存在,查找第一个该name的元素

 

l        dom =javascriptExpression

dom locator JavaScript表达式来定位HTML中的元素,注意必须要以”document”开头

例如:

dom =document.forms[ myForm].myDropdown

dom = document.images [56]

 

l        xpath =xpathExpression

xpath locator XPath表达式来定位HTML中的元素,必须注意要以”//”开头

例如:

xpath =//img[@alt= The image alt text ]

xpath =//table[@id= table1]//tr[4]/td[2]

 

l        link=textPattern

link locator link来选择HTML中的连接或锚元素

例如:

link= The link text

 

l        在没有locator前序的情况下 Without a locator prefix, Selenium uses:

如果以”document.”开头,则默认是使用dom locator,如果是以“//”开头,则默认使用xpath locator,其余情况均认作identifier locator

 

2.     String Matching Patterns ( 字符串匹配模式)

l        glob:patthern

glob 模式,用通配符”*”代表任意长度字符,“?”代表一个字符

 

l        regexp:regexp

正则表达式模式,用JavaScript正则表达式的形式匹配字符串

 

l        exact:string

精确匹配模式,精确匹配整个字符串,不能用通配符

 

l        在没有指定字符串匹配前序的时候,selenium 默认使用golb匹配模式

 

3.     Select Option Specifiers (Select 选项指定器)

l        label=labelPattern

通过匹配选项中的文本指定选项

例如:label=regexp:^[Oo]ther

 

l        value=valuePattern

通过匹配选项中的值指定选项

例如:value=other

 

l        id=id

通过匹配选项的id指定选项

例如: id=option1

 

l        index=index

通过匹配选项的序号指定选项,序号从0开始

例如:index=2

 

l        在没有选项选择前序的情况下,默认是匹配选项的文本

 

三、           Actions

l        描述了用户所会作出的操作

l        Action 有两种形式: actionactionAndWait, action会立即执行,而actionAndWait会假设需要较长时间才能得到该action的相响,而作出等待,open则是会自动处理等待时间。

 

1.     click

l        click(elementLocator)

-        点击连接,按钮,复选和单选框

-        如果点击后需要等待响应,则用”clickAndWait

-        如果是需要经过JavaScriptalertconfirm对话框后才能继续操作,则需要调用verifyassert来告诉Selenium你期望对对话框进行什么操作。

click

aCheckbox

clickAndWait

submitButton

clickAndWait

anyLink

 

2.     open

-        在浏览器中打开URL,可以接受相对和绝对路径两种形式

-        注意:该URL必须在与浏览器相同的安全限定范围之内

open

/mypage

 

open

http://localhost/

 

 

3.     type

l        type(inputLocator, value)

-        模拟人手的输入过程,往指定的input中输入值

-        也适合给复选和单选框赋值

-        在这个例子中,则只是给钩选了的复选框赋值,注意,而不是改写其文本

type

nameField

John Smith

typeAndWait

textBoxThatSubmitsOnChange

newValue

 

4.     select

l        select(dropDownLocator, optionSpecifier)

-        根据optionSpecifier选项选择器来选择一个下拉菜单选项

-        如果有多于一个选择器的时候,如在用通配符模式,如”f*b*,或者超过一个选项有相同的文本或值,则会选择第一个匹配到的值

select

dropDown

Australian Dollars

select

dropDown

index=0

selectAndWait

currencySelector

value=AUD

selectAndWait

currencySelector

label=Auslian D*rs

 

5.     goBack,close

l        goBack ()
模拟点击浏览器的后退按钮

l        close()
模拟点击浏览器关闭按钮

goBack ()

 

 

close

 

 

 

6.     selectWindow

l        select(windowId)

-        选择一个弹出窗口

-        当选中那个窗口的时候,所有的命令将会转移到那窗口中执行

selectWindow

myPopupWindow

selectWindow

null

 

7.     pause

l        pause(millisenconds)

-        根据指定时间暂停Selenium脚本执行

-        常用在调试脚本或等待服务器段响应时

pause

5000

pause

2000

 

8.     fireEvent

l        fireEvent (elementLocatore,evenName)

模拟页面元素事件被激活的处理动作

fireEvent

textField

focus

fireEvent

dropDown

blur

 

9.     waitForCondition

l        waitForCondition (JavaScriptSnippet,time)

- 在限定时间内,等待一段JavaScript代码返回true值,超时则停止等待

waitForCondition

var value=selenium.getText("foo"); value.match(/bar/);

3000

 

10. waitForValue

l        waitForValue (inputLocator, value)

-        等待某input(hidden input)被赋予某值,

-        会轮流检测该值,所以要注意如果该值长时间一直不赋予该input该值的话,可能会导致阻塞

waitForValue

finishIndication

isfinished

 

 

11. store,stroreValue

l        store(valueToStore, variablename)

保存一个值到变量里。
该值可以由自其他变量组合而成或通过JavaScript表达式赋值给变量

store

Mr John Smith

fullname

store

${title} ${firstname} ${suname}

fullname

store

javascript {Math.round(Math.PI*100)/100}

PI

 

l        storeValue (inputLocator,variableName)
把指定的input中的值保存到变量中

storeValue

userName

userID

type

userName

${userID}

 

12. storeText , storeAttribute

l        storeText (elementLocator, variablename)
把指定元素的文本值赋予给变量

storeText

currentDate

expectedStartDate

verifyValue

startDate

${expectedStartDate}

 

l        storeAttribute (elementLocator@attributeName,variableName)
把指定元素的属性的值赋予给变量

storeAttribute

input1@class

classOfInput1

verifyAttribute

input2@class

${classOfInput1}

 

13. chooseCancel .., answer..

l        chooseCancelOnNextConfirmation ()

-        当下次JavaScript弹出confirm对话框的时候,selenium选择Cancel

-        如果没有该命令时,遇到confirm对话框Selenium默认返回true,如手动选择OK按钮一样

chooseCancelOnNextConfirmation

 

 

 

-        如果已经运行过该命令,当下一次又有confirm对话框出现时,也会同样地再次选择Cancel

l        answerOnNextPrompt (answerString)

- 在下次JavaScript弹出prompt提示框时,赋予其anweerString的值,并选择确定

answerOnNextPrompt

Kangaroo

 

 

四、           Assertions

l        允许用户去检查当前状态

l        两种模式: Assert Verify

l        Assert失败,则退出测试

l        Verify失败,测试会继续运行

 

1.     assertLocation, assertTitle

l        assertLocation (relativeLocation)
判断当前是在正确的页面

verifyLocation

/mypage

assertLocation

/mypage

 

l        assertTitle (titlePattern)
检查当前页面的title是否正确

verifyTitle

My Page

 

assertTitle

My Page

 

 

2.     assertValue

l        assertValue (inputLocator, valuePattern)

-        检查input的值

-        对于 checkboxradio,如果已选择,则值为”on,反之为”off

verifyValue

nameField

John Smith

assertValue

document.forms [2].nameField

John Smith

 

3.     assertSelected , assertSelectedOptions

l        assertSelected (selectLocator, optionSpecifier)
检查select的下拉菜单中选中的选型是否和optionSpecifer(Select选择选项器)的选项相同

verifySelected

dropdown2

John Smith

verifySelected

dorpdown2

value=js*123

assertSelected

document.forms [2].dropDown

label=J*Smith

assertSelected

document.forms [2].dropDown

index=0

 

l        assertSelectOptions (selectLocator, optionLabelList)

-        检查下拉菜单中的选项的文本是否和optionLabelList相同

-        optionLabelList 是以逗号分割的一个字符串

verifySelectOptions

dropdown2

John Smith,Dave Bird

assertSelectOptions

document.forms [2].dropdown

Smith\,J,Bird\,D

 

4.     assertText

l        assertText (elementLocator,textPattern)

-        检查指定元素的文本

-        只对有包含文本的元素生效
(Works for any element that contains text)

-        对于Mozilla类型的浏览器,用textContent取元素的文本,对于IE类型的浏览器,用innerText取元素文本

verifyText

statusMessage

Successful

assertText

//div[@id='foo']//h1

Successful


5.     assertTextPresent , assertAttribute

l        assertTextPresent (text)
检查在当前给用户显示的页面上是否有出现指定的文本

verifyTextPresent

You are now logged in

 

assertTextPresent

You are now logged in

 

 

l        assertAttribute (elementLocator@attributeName, ValuePattern)
检查当前指定元素的属性的值

verifyAttribute

txt1@class

bigAndBlod

assertAttribute

document.images [0]@alt

alt-text

verifyAttribute

//img[@id='foo']/alt

alt-text

 

 

6.     assertTextPresent , etc.

l        assertTextPresent (text)

l        assertTextNotPresent (text)

l        assertElementPresent (elementLocator)

verifyElementPresent

submitButton

 

assertElementPresent

//img[@alt='foo']

 

l        assertElementNotPresent (elementLocator)

 

7.     assertTable

l        assertTable (cellAddress, valuePattern)

-        检查table里的某个cell中的值

-        cellAddress 的语法是tableName.row.column, 注意行列序号都是从0开始

verifyTable

myTable.1.6

Submitted

assertTable

results0.2

13

 

8.     assertVisible , nonVisible

l        assertVisible (elementLocator)

-        检查指定的元素是否可视的

-        隐藏一个元素可以用设置css的‘visibility’属性为’hidden’,也可以设置‘display’属性为‘none

verfyVisible

postcode

 

assertVisible

postcode

 

 

l        assertNotVisible (elementLocator)

verfyNotVisible

postcode

 

assertNotVisible

postcode

 

 

9.     Editable, non-editable

l        assertEditable (inputLocator)

检查指定的input是否可以编辑

verifyEditable

shape

 

assertEditable

colour

 

 

l        assertNotEditable (inputLocator)

检查指定的input是否不可以编辑

10. assertAlert

l        assertAlert (messagePattern)

-        检查JavaScript是否有产生带指定messagealert对话框

-        alert 产生的顺序必须与检查的顺序一致

-        检查alert时会产生与手动点击’OK’按钮一样的效果。如果一个alert产生了,而你却没有去检查它,selenium会在下个action中报错。

-        注意:Selenium 不支持 JavaScript onload()事件时调用alert();在这种情况下,Selenium需要你自己手动来点击OK.

 

11. assertConfirmation

l        assertConfirmation (messagePattern)

-        检查JavaScript是否有产生带指定messageconfirmation对话框和alert情况一样,confirmation对话框也必须在它们产生的时候进行检查

-        默认情况下,Selenium会让confirm() 返回true, 相当于手动点击Ok按钮的效果。你能够通过chooseCancelOnNextConfirmation命令让confirm()返回false.同样地,如果一个cofirmation对话框出现了,但你却没有检查的话,Selenium将会在下个action中报错

-        注意:在Selenium的环境下,confirmation对话框框将不会再出现弹出显式对话框

-        注意:Selenium不支持在onload()事件时调用confirmation对话框,在这种情况下,会出现显示confirmatioin对话框,并需要你自己手动点击。

 

12. assertPrompt

l        assertPrompt (messagePattern)

-        检查JavaScript是否有产生带指定messagePrompt对话框

-        你检查的prompt的顺序Prompt对话框产生的顺序必须相同

-        必须在verifyPrompt之前调用answerOnNextPrompt命令

-        如果prompt对话框出现了但你却没有检查,则Selenium会在下个action中报错

answerOnNextPrompt

Joe

 

click

id=delegate

 

verifyPrompt

Delegate to who?

 

 

五、           Parameters and Variables

l        参数和变量的声明范围由简单的赋值到JavaScript表达式赋值

l        Store storeValuestoreText为下次访问保存值

l        Selenium内部是用一个叫storeVarsmap来保存变量名

 

1.      Variable Substitution 变量替换

l        提供了一个简单的方法去访问变量,语法 ${xxx}

store

Mr

title

storeValue

nameField

surname

store

${title} ${suname}

fullname

type

textElement

Full name is: ${fullname}

 

2.      JavaScript Evaluation JavaScript 赋值

l        你能用JavaScript来构建任何你所需要的值

l        这个参数是以javascript开头,语法是javascript{with a trailing}

l        可以通过JavaScript表达式给某元素赋值

store

javascript {'merchant'+(new Date()).getTime()}

merchantId

type

textElement

javascript {storedVars['merchantId'].toUpperCase()}

 

3.      Generating Unique values 产生唯一值

l        问题:你需要唯一的用户名

l        解决办法: 基于时间来产生用户名,如’fred+(new Date().getTime())