天天看點

Robot Framework-Selenium自動化測試-08

Selenium2Library安裝

Selenium有2個版本,Selenium 1.0和Selenium 2.0。Selenium1.0也就是Selenium RC Server,Selenium2.0就是加入了Webdriver。與之對應的基于Robot Framework的測試庫分别是SeleniumLibrary和Selenium2Library,多了個“2”的就是基于Webdriver的。

安裝位址:

https://github.com/rtomac/robotframework-selenium2library

可以選擇最新的tag.gz包下載下傳和之前的安裝方式相同

也可以直接使用pip安裝,這裡不做解釋

安裝完成後,在Import Library的地方輸入Selenium2Library,單擊“OK”按鈕就可以了。如果安裝正确,Library裡顯示的Selenium2Library是黑色的就正确了。如果是紅色的,可能是有些依賴庫沒有安裝成功,或者S2L本身有錯誤,可以檢視一下RIDELOG找找原因。

Robot Framework-Selenium自動化測試-08

Selenium2Library 常用關鍵字

主要分類:browserManagement,cookie,elements(elements,formElement,SelectElement,tableElement),javascript,screenshot,waiting等

browserManagement

Open Browser 打開浏覽器

Close Browser 關閉浏覽器

Go to 轉到某個URL

Go Back 浏覽器後退

Web頁面打開新的頁面可從目前浏覽器彈出新的視窗,或者重新打開一個新的浏覽器

對于第1種情況,需要用關鍵字Select Window和Close Window來處理彈出的視窗,隻有當選擇到對應的視窗,才能對這個視窗裡的頁面元素進行操作。不過實際操作時會發現有時Select Window不能保證一次就選中那個視窗,是以通常會結合Wait Until Keyword Succeeds這個關鍵字一起使用,來保證能選中那個視窗。如果要手動關閉這個彈出視窗,可以用Close Window。不過在通常情況下,都是在彈出視窗做了操作後,會自動關閉這個視窗,此時不要想着直接操作原來主視窗的頁面元素,一定要先Select Window Main,即回到主視窗才能操作。

對于第2種情況,官方給出的例子是用2個“Open Browser”打開了2個浏覽器,每個浏覽器分别打開不同的頁面,此時兩個浏覽器切換需要用到Switch Browser這個關鍵字來切換,參數是打開浏覽器的index順序或者alias别名。而此時要關閉所有浏覽器,最好直接用Close All Browsers,否則如果用Close Browser隻會關閉目前的浏覽器,還要切換到另一個浏覽器去關閉。

Browser是通過Open Browser建立的,每一個Browser 都是通過Webdriver建立的,你可以了解為每個Browser都是一個獨立線程,而在目前線程的Browser上打開的新的頁面都可以算作Window。一個Browser上可以打開一個或多個Window,具體要看頁面的代碼實作。每次的操作隻能在一個Window上進行,如果目前Window被關閉了,必須要先切換到其他的Window上,才能在那個Window上繼續操作,如果不切換,這時候的任何操作會是在一個已經關閉的Window上進行,此時肯定會報錯。

是以Window切換要使用Select Window,Browser 切換要使用Switch Browser,不能互換混用。

在Select Window時,經常會遇到模态視窗,這種視窗有時不一定能直接選擇到,在我們的修改版本裡,添加了3個通過handle去操作視窗的關鍵字。即 select window by handle:通過handle 選擇window;get window handles:擷取目前線程所有視窗的handles,傳回List;get current window handle:擷取目前視窗的handle。這3個關鍵字用好了可以幫助我們更好地處理視窗的切換。

Select Frame和Unselect Frame,這兩個應該用的會比較多,現在很多頁面都采用了frame或者iframe。對于在frame或者iframe裡的對象,無法直接操作,是以如果大家遇到頁面元素明明就在頁面裡有,但是操作時卻告訴你找不到頁面元素的情況,首先要看的就是這個頁面元素是不是在frame或者iframe裡。如果在frame或者iframe裡,那就一定要用Select Frame先選擇到這個frame或者iframe,如果嵌套有好幾層,就要從最外層Select Frame,然後依次Select Frame到你要操作的頁面元素所在的那一層,然後才能操作。操作以後,可能又要去處理frame外面的頁面元素了,這時就要用Unselect Frame了,這個關鍵字是直接跳出所有frame或iframe的。是以對于多層frame或iframe的情況,進去的時候要一層一層地進去,出來就可以直接出來了。但是可惜沒有回到上一層的,如果你的測試場景需要在frame或iframe之間切換,那就比較麻煩了。比如說這裡有3層iframe,你要先操作一個第3層的頁面元素A,然後再操作一個第2層iframe裡的頁面元素B,你的腳本要先依次Select Frame第1層、第2層、第3層,然後操作你的頁面元素A,之後要操作第2層的頁面元素B,需要先Unselect Frame,然後再Select Frame第1層、第2層,才能操作你的頁面元素B。看起來很繞吧,現在一般情況下最多1~2層iframe,3層的基本很少見到,2層其實也不多。如果真的碰到了,最好要求開發人員仔細考慮一下此處是否真的需要那麼多iframe。

Cookie

add cookie:添加Cookie

delete cookie:删除Cookie

delete all cookies:删除所有 Cookie

get cookies:擷取所有Cookie

get cookie value:擷取Cookie的值

Elements

(1)Elements

click element

click link

click image

press key 模拟鍵盤操作

Assign id to element 指定一個id

滑鼠操作:

mouse down 、 mouse up 、 mouse over 、 mouse out

擷取目前對象的左上角頂點距離整個頁面的橫坐标和縱坐标:Get horizontal position 、get vertical position

擷取網頁元素的value或者text:get value 、 get text

擷取元素其他屬性值,用get element attribute關鍵字,如擷取class值:get element attribute [email protected]

(2)formElement

表單操作

送出表單 submit form

勾選複選框 select checkbox 、 unselect checkbox

單選框:select radio button

選擇檔案:choose file

input text 、input password

click button

(3)SelectElement

清單框,分為單選和多選,選擇其中某一項使用select from list,也可以使用select from list by index 、select from list by value 、select from list by label,分别是通過index、value、label來選擇清單項,可以選擇的更快

多選框全部選擇可以用 select all from list或者unselect,隻有多選清單框才能unselect。unselect from list、unselect from list by index、unselect from list by value、unselect from list by label都是用來取消選擇的。

擷取所有的清單項:get list items

如果想确認一下選中的清單項對不對,可以用get selected list label和 get selected list value。如果是多選清單框,這兩個關鍵字預設取第1個清單項。如果想要取到所有的選中項,就把這兩個關鍵字後面的label和value變成labels和values。

(4)tableElement

擷取指定table裡指定行列的元素的文本值:get table cell

點選表格指定單元格裡的元素和連結:click element at table 、click link at table cell

擷取某個文本在表格的哪一行或哪一列:get index in table column 、 get index in table row

擷取表格的行數和在某一行表格有多少列:get table rows 、 get table cols at row

添加這些關鍵字主要的原因還是因為tableElement裡面提供的用于操作table元素的方法太少了,隻有一個get table cell是操作table元素的,但是這裡需要指定table的行和列,實際使用的時候你會發現很多場景都是我們并不知道我們要的資料在哪行哪列,如果隻知道行或列,那麼吳穹博士提供的get index的兩個關鍵字就會發揮作用:如果行列都不知道(好像不太可能出現)或者你想周遊table裡所有單元格,那麼用那兩個關鍵字就會比較有用。

JavaScript

執行JavaScript腳本:execute JavaScript 和execute async JavaScript,後者用于異步執行,通過在函數最後加上回調來傳回結果,如果在逾時時間内沒有執行完成就會失敗

confirm action 自動進行對話框的确認,确認對話框通常有确認和取消,預設是确認,如果想點選取消,就要先用choose cancel on next confirmation 進行設定,然後再使用confirm action。choose cancel 這個關鍵字是做一個設定,并不是真的去确認對話框,确認對話框還是confirm action 要做的事情。同樣你想恢複成預設點

“ok”,就需要用choose ok on next confirmation進行設定,然後再使用confirm action。

screeshot

隻有一個關鍵字

對目前頁面進行截圖:capture page screenshot

這個截圖是基于目前浏覽器的頁面進行截圖的,如果此時由于報錯導緻頁面被關閉,截圖就無法使用

解決辦法是使用RF自帶的截圖庫裡的方法進行截圖,這個截圖是對目前整個桌面進行截圖

waiting

三個關鍵字

顯示等待

wait for condition

wait until page contains

wait until page contains element

wait until page的兩個關鍵字在頁面加載比較慢的時候還是很有用的,避免我們在頁面沒有加載完就先去操作頁面元素。鼓勵大家多用顯式等待。

測試案例設計

1、登陸案例–QQ郵箱登陸

(1)打開浏覽器

(2)選擇使用者名、密碼所在架構

(3)輸入使用者名

(4)輸入密碼

(5)點選登陸

(6)關閉浏覽器

Robot Framework-Selenium自動化測試-08

檢視浏覽器顯示情況和運作結果:

Robot Framework-Selenium自動化測試-08

2、登陸案例–QQ郵箱登陸-關鍵字模式

和1相同,但改成關鍵字模式比較好閱讀了解

在測試案例對應的測試套件下面增加一個資源檔案,增加後導入到對應的測試套件下

Robot Framework-Selenium自動化測試-08

導入資源檔案:

Robot Framework-Selenium自動化測試-08

将之前的步驟已關鍵字的方式寫出來:

打開浏覽器(并選中對應的架構):

Robot Framework-Selenium自動化測試-08

輸入使用者名、密碼:

Robot Framework-Selenium自動化測試-08
Robot Framework-Selenium自動化測試-08

點選登陸:

Robot Framework-Selenium自動化測試-08

然後增加腳本将1裡面的腳本都換成關鍵字:

Robot Framework-Selenium自動化測試-08

運作後結果同案例設計1,但少了一個關閉浏覽器的動作

3、嵌套案例

再添加一個資源檔案testflow.robot,并加載之前的資源檔案elements.robot

在要編寫的測試案例對應的套件裡導入testflow.robot

然後在testflow.robot裡添加關鍵字“登陸流程”,并添加幾個參數,如下圖所示:

Robot Framework-Selenium自動化測試-08

然後編寫腳本:

Robot Framework-Selenium自動化測試-08

圖中第二條腳本是驗證頁面是否包含對應的文本

第三條是關閉浏覽器

運作後檢視運作結果:

Robot Framework-Selenium自動化測試-08

上面的步驟分為了三層:

案例層

流程層

元素層

這樣做對于需求變更,隻需要在流程層裡調整流程順序就可以了,不用把每個案例都修改一次

也可以分為四層:

案例層:測試流程+資料

流程層:頁面層操作

頁面層:元素操作,比如打開浏覽器,輸入使用者名

元素層:測試庫封裝,open browser 封裝成打開浏覽器

最終經過分層,把資料和流程剝離開,同時減少了備援,能夠減少一些由需求變更引發的修改。建議大家根據自己的實際情況将案例結構分成三層或四層。資料可以進一步剝離,比如說将資料存在變量檔案、資料庫或者Excel裡,通過運作的時候去讀取資料來運作。

腳本案例

Browser

(1)切換浏覽器

這個案例主要是為了示範Switch Browser的作用。前面其實也提到了,通過Open Browser 打開的兩個浏覽器可以用Switch Browser。Switch之後通過Get Title擷取目前浏覽器的Title,來确認是否切換成功。因為開了多個Browsers,是以最後要用Close All Browsers關掉所有的Browsers。如果用Close Browser隻會關閉目前的Browser

Robot Framework-Selenium自動化測試-08

常見問題

1、不要修改浏覽器顯示比例,在不是100%的情況下會出現運作失敗

2、定位不到網頁元素很可能是因為該元素在iframe裡面,需要先select frame再進行操作

繼續閱讀