RobotFramework_3.SeleniumLibrary操作(一)
SeleniumLibrary的使用
頁面的元素的定位
我們在操作頁面的元素,比如一個按鍵、輸入框之前首先要做的是對頁面元素進行定位。
在自動化測試中,頁面元素的定位是否准確對用例的執行成功與否起到了關鍵的作用。
SeleniumLibrary支持幾乎所有主流的網頁元素定位,比如id、name、xpath表達式、css選擇器等
SeleniumLibrary支持兩種定位策略,隱式的和顯式的
隱式定位
不用指明定位的方式,操作的關鍵字會調用默認的定位方式,如下圖:
使用Click Element點擊元素時,使用隱式的定位不指明定位方式,會默認example為元素的id或name屬性
不推薦使用這種定位策略
顯式定位
顯式定位方式要使用:定位方式:對應元素值的方式 如下圖:
第一行,點擊元素name屬性值為foo的元素
SeleniumLibrary支持的元素定位方式如下圖:
推薦使用其中的id,name,link,xpath這四種定位方式
使用sizzle或者別名為jquery的定位方式需要Robotframework安裝jQuery library
以百度首頁的百度搜索輸入框為例:
定位這個輸入框可以用以下幾種方式:
id:kw
name:wd
xpath://[@id="kw"]或//[@id="kw"]
注意定位某個元素時,請確保使用這種定位方式只能定位到唯一一個元素,否則,會定位到相同值的元素在代碼順序中的第一個 SeleniumLibrary3.0之后xpath://[@id="kw"]可簡寫為//[@id="kw"]
Link這種定位只能用於超鏈接元素<a>
,例如首頁上的“新聞”鏈接:<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新聞</a>
輸入文本Input Text
將指定文本輸入定位的輸入框
兩個參數:[ locator | text ]
前者是定位符,后者是要輸入的文本
只能對
<input>
輸入框元素Input Text,否則程序會報錯
為了確保輸入框在輸入前被清空,可以先使用Clear Element Text來清除定位輸入框的內容
點擊元素
推薦使用:Click Element關鍵字
Click Button,Click Image,Click Link也可以用於點擊按鍵,圖片和鏈接
但是以上都是元素,所以都可以用Click Element來替代
兩個參數:[ locator | modifier=False ]locator定位符為必選參數,modifier為可選參數
modifier為點擊時同時按下的按鍵操作,多個按鍵使用+號連接
如果要點擊某個元素的某個坐標可以使用Click Element At Coordinates
三個參數:定位符,x坐標,y坐標。x、y坐標為距離元素中心點開始計算的值
注釋
寫代碼時添加注釋是一個好習慣,有助於執行的人理解代碼的執行邏輯,也方便過后修改代碼
可以在代碼行之后的空列用#來注釋,也可以用#注釋一行
等待,超時和延遲
在測試用例執行時,就算執行邏輯、定位方式都OK還是有很大概率會執行失敗。
這是因為在執行用例時,必須考慮頁面顯示和頁面操作的同步問題,或者說我們必須確保在操作頁面元素前,相應的元素已經顯示,否則會出現元素找不到的問題。
這個問題在網絡延遲高,加載內容較多的頁面,或者服務器排隊嚴重時尤其嚴重。
所以我們必須設置合理的超時時間,等待頁面加載或者在演示用例、debug時降低代碼運行速度。
顯式等待wait ...
顯示等待是我們最常用的等待方式,可以根據需要,設置主動的等待時間。
Selenium有很多具體的等待方式,如下圖:
我們最常用的顯式等待方式是:Wait Until Element Is Visible
作用:等待直到定位的元素可見
參數:[ locator | timeout=None | error=None ]三個參數,一個locator定位符必選,timeout超時時間和error錯誤為可選
當時間超出超時時間,元素仍不可見會執行失敗
error用於覆蓋默認的error message
timeout超時時間設置詳見下方,Selenium的默認超時時間為timeout=5.0
針對某些JS彈出的窗口,或者AJAX的彈出式菜單,使用Wait Until Page Contains Element來替代Wait Until Element Is Visible
Timeout
在使用Wait...關鍵字或者與Alert警告框相關關鍵字時,會使用Timeout超時時間設置。
可以使用Set Selenium Timeout關鍵字來設置超時時間
參數只有一個:設置的超時時間值,但該關鍵字有返回值,可以聲明一個變量來存
時間格式:只寫數字默認單位為秒,例如:0.5 or 42,或者使用Robotframework的時間格式,加上時間單位:1.5 seconds or 1 min 30 s
隱式等待implict wait
隱式等待主要用於打開瀏覽器時。
可以通過Set Selenium Implicit Wait關鍵字來設置最大的隱式等待時間
時間單位和上面Timeout格式一樣
如果只設置修改當前瀏覽器窗口的隱式等待時間使用Set Browser Implicit Wait關鍵字
selenium speed
可以使用Set Selenium speed來延遲Selenium的全局執行速度。
一個參數:每個Selenium命令執行后等待時間值
|Set Selenium Speed|0.5 seconds|
該關鍵字用於演示用例,或者調試代碼時,不要用於保證元素出現或者頁面加載!
SeleniumLibrary默認值:timeout=5.0, implicit_wait=0.0,selenium speed=0.0
獲取網頁元素信息
獲取網頁元素文本Get Text
作用:獲取定位元素的文本
一個必選參數:locator定位符
在使用時一般要用一個變量來存獲取到的文本,例如獲取百度主頁右上角的鏈接文本:
獲取網頁元素屬性Get Element Attribute
作用:獲取定位元素的對應屬性值
兩個必選參數:locator和屬性名
繼續用上圖作為例子,獲取新聞鏈接的href跳轉url屬性值:
獲取網頁元素標題Get Title
作用:獲取當前網頁標題
沒有參數,一般需要變量存放獲取的值
獲取網頁url地址Get Location
作用:獲取當前網頁url地址
沒有參數,一般需要變量存放獲取的值
Get locations:獲取所有瀏覽器窗口的url地址
比較預期與實際結果
在自動化測試用例中,對預期和實際結果比較非常重要,單純的執行操作不失敗只能說明功能沒有大問題。
通常我們還需要對頁面的元素屬性、文本值或者網頁標題、url進行對比,判斷是否是我們想要的結果。
比較常用的判斷關鍵字是:
Should Be Equal
作用:比較預期值和實際值是否一致。
當兩個值不一致,語句執行會出錯,腳本中斷執行。
繼續用上面百度主頁做例子,獲取網頁標題和url來判斷,打開頁面是否是百度主頁: