基於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 world"
selenese HTML存儲的樣子://div[text()="hello world"]
你應該這樣寫://div[text()="hello${nbsp}world"]
最後HMTL存儲的樣子://div[text()="hello${nbsp}world"]
這樣才能正確連接到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核心代碼。
這裏寫圖片描述
在標準版本中,這個文件不存在,用戶能夠將其擴展放到這個統一位置進行統一管理