Robot Framework:Web自動化之-元素處理

普通元素
1 文本輸入框
1.1 輸入文本css

Wait Until Element Is Visible	xpath=//*[@id="username"]	5
Clear Element Text	xpath=//*[@id="username"]	
Input Text	xpath=//*[@id="username"]	${username}

  

1.2 獲取文本html

Wait Until Element Is Visible	css=.salus-form-explain-outside	5
${return_value}	Get Text	css=.salus-form-explain-outside
Return From Keyword	${return_value}

 

2 普通buttonpython

3 普通linkchrome

或 click link數據庫


4 label文本
能夠直接用page should contain 校驗windows

5 option選項框api

Ride中,按F5,搜索select 相關的關鍵字,能夠找到option選項框的一些可使用的關鍵字;數組

6 複選框瀏覽器

Ride中,按F5,搜索checkbox,能夠找到複選框的一些可使用的關鍵字;less


7 單選按鈕
Ride中,按F5,搜索Radio,能夠找到複選框的一些可使用的關鍵字;

 

8 位置選擇
直接click element


9 alert處理
Dismiss alert
Get Alert Message

Ride中,按F5,搜索alert,能夠找到alert的一些可使用的關鍵字;

10 提示框處理
Get text 獲取提示信息
Choose Ok on next confirmation


11 確認框處理
Get text 獲取提示信息
click element 肯定或取消按鈕,關閉確認框


特殊元素
1 點擊下拉 li菜單
先click 上級菜單
而後 wait untl page contains element 下級菜單連接
而後click element下級菜單的連接


2 懸停下拉li菜單
先 Mouse over 上級菜單
而後 focus 下級菜單
而後 Mouse Over 下級菜單
而後 click element 下級菜單(chrome用execute Javascript $(‘下級菜單css定位’).click())


3  懸停下拉li動態選項框

步驟1:點擊展開下拉選擇框;
步驟2:根選擇指定的區域;

 

4 日期選擇輸入框

上面這種日期選擇框,能夠直接用input text來輸入起止日期;
今天——近30天,則都是link,能夠直接click element來操做;

5 點擊彈出選擇窗口

上述這種選擇窗口,直接點擊清除,而後定位篩選輸入框,輸入查詢的選項,而後select checkbox 定位到要選擇的那個選項,或直接click element定位到複選框,最後點擊窗口外面的空白處,完成輸入;

 

6 control slider滑塊

使用Drag And Drop By Offset (locator,xoffset,yoffset)
其中locater定位到滑塊元素(可拖動的那個小塊),xoffset爲滑塊橫向偏移像素單位,正整數向右移動,負整數向左移動,yoffset爲上下縱向偏移像素單位,正整數向上,負整數向下;
當想要移動到最右端或最左端,查看滑條的總長度,不要忘記扣掉拖動的小塊的長度,如滑條軌道長度爲213,小滑塊長度爲3,則210便可滑動到最右邊;

 

7 帶連接的動態列表各值獲取


頁面代碼如上的一個鼠標懸停後展現下拉菜單,下拉菜單的選項個數的獲取
能夠經過
execute javescript return $("#mc-main-inner > div.main-content.wcs-main-content.wcs-space > div.account-nav.clearfix > div > div.account-item > ul > li").length;
這裏爲了驗證下拉菜單各選項是否正確,且反正要從數據庫查選項ID;直接從數據庫查詢了選項的個數、選項名稱、選項ID;

處理思路:
首先,從數據庫查詢數據選項個數、選項名稱、選項ID,三元組,保存在@{Ln}中;
而後,等待頁面中的選項框展現,FOR循環,比對要選擇的選項名稱,找到選項在數組中的下標,從而找到選項ID值所在數組下標;
接着,鼠標mouse over懸停到選項框上級菜單,展現下拉菜單,而後evaluate 將選項ID值轉換爲整型;
最後,執行 execute Javascript reload(${選項名稱對應的ID}),等待加載後,檢查選項框應顯示選中的選項名稱;
2.2.10 上傳文件


使用AutoIt的相關關鍵字,可實現上傳文件窗口的操做

處理流程:
首先,點擊上傳文件按鈕,打開了window的打開文件窗口;
而後,win wait等待打開文件窗口展示,Win Active,將操做焦點轉移到打開文件窗口
sleep 2秒,等待焦點轉移完成,
Control Focus 到打開窗口的編輯框
Control set text,在打開的編輯框Edit1中輸入要上傳的文件路徑
sleep 2秒,等待輸入完成
Control Focus 到打開按鈕,control click點擊打開
sleep 2 秒,等待打開上傳文件完成,
最後,Win close 關閉打開文件窗口,完成上傳操做

如何定位打開文件的窗口呢?使用AutoItV3中的 AutoIt Window Info(x86)工具,以下圖,打開工具;

點擊 Finder Tools,按住,拖動到,打開文件窗口的文件名輸入框,會自動獲取該窗口的信息;Title,編輯框的control值:Edit1;
拖動到「打開」按鈕,則能夠獲取它的信息button1


2.2.11 下載文件

處理流程:
(1)找到要下載的文件的連接,右鍵點擊連接;
(2)等待右鍵菜單出現後,模擬鍵盤輸入K(快捷鍵:另存爲)
(3)Win wait 等待另存爲窗口出現,而後Win Active 激活窗口,輸入要下載保存的路徑
(4)點擊保存按鈕,完成下載操做,關閉另存爲窗口;
(5)等待文件下載,檢查文件已下載到指定目錄,Operating System庫中的 should exist關鍵字
(6)Operating System庫中的 Remove File,刪除剛剛下載的文件,方便下次運行本條用例,不用改參數;
2.2.12 瀏覽器打開新頁籤和地址

2.2.13 瀏覽器切換窗口

按F5,查詢該關鍵字,獲取更多使用方法的介紹;
2.2.14 翻頁操做
${nPage}= 選擇每頁顯示記錄數 ${pagesize} #返回頁面中獲取的總頁數
${forNumber}= Evaluate int(${nPage}-1)
Run Keyword If ${nPage}>1 循環檢查點擊下一頁 ${forNumber} ${nPage} ELSE IF ${nPage}==1 LOG 總頁數爲1不可點擊下一頁 ELSE LOG 獲取總頁數錯誤
Run Keyword If ${nPage}>1 點擊首頁
Run Keyword If ${nPage}>1 循環檢查點擊上一頁 ${forNumber} ${nPage} ELSE IF ${nPage}==1 LOG 總頁數爲1不可點擊上一頁 ELSE LOG 獲取總頁數錯誤
Run Keyword If ${nPage}>1 點擊尾頁 ${nPage}
Sleep 3
輸入跳轉頁數跳轉 ${pageN} ${nPage}

以上是翻頁的流程模板,裏面還有自定義關鍵字:
(1)選擇每頁顯示記錄數

(1)_1 根據記錄總數計算總頁數
${r}= 獲取記錄總數
${n}= Evaluate math.ceil(int(${r})/int(${pagesize})) math
${N}= Convert To Integer ${n}
${pages}= Convert To Integer ${pagesize}
${R}= Convert To Integer ${r}
${calc_np}= Run Keyword If ${R}<=${pages} Set Variable 1 ELSE IF ${R}>${pages} and (${R}-${N}*${pages})>0 Evaluate int(${N}+1) ELSE IF ${R}>${pages} and int(${R}-${N}*${pages})==0 Evaluate int(${N}) ELSE LOG 頁數計算錯誤
(1)_1_1 獲取記錄總數

(1)_2 獲取頁面中總頁數

(2)循環檢查點擊下一頁

(2)_1點擊下一頁

(2)_1_1 檢查當前頁面記錄數


(2)_1_1_1獲取當前頁面pageSize

(2)_1_1_2統計當前頁面列表記錄數

(2)_1_2獲取當前爲第幾頁

(3)點擊首頁

(4)循環檢查點擊上一頁

(5)點擊尾頁

(5)_1 計算尾頁應該顯示的記錄數

(6)輸入跳轉頁數跳轉


2.2.15 模擬鍵盤輸入
Press key 關鍵字,能夠模擬鍵盤向某個元素輸入內容,輸入參數爲ACSII碼

若是是windows接收輸入,則使用win32api模塊的 win32api.keybd_event(),第一個參數爲輸入的字符的ASCII碼;
百度ASCII碼錶
2.2.16 鼠標右鍵點擊

其中 Right Click Element 爲自定義lib中的函數

2.2.17 evaluate 的一些使用方法
(1)用於計算,見關鍵字說明,導入python的某個模塊,調用模塊中的某個方法進行計算的操做

例如,導入math,使用math.ceil(),來作向上取整計算;

(2)執行簡單python語句

2.2.18 Convert to 轉換數據類型

輸入 convert,按 ctrl+alt+space,補充查詢出相關的關鍵字;
2.2.19 變量的聲明賦值、使用(參考齊濤-道長博客)
2.2.19.1變量的聲明
一、變量標識符
使用變量標識符{變量名} 來進行表示, Scalar變量用 $ 做爲標識符${x},List型變量用 @ 做爲標識符,@{x} 
二、變量聲明
由於RF底層是Python,變量不須要特定聲明,只要有初始化賦值便可使用。
好比咱們能夠在TestSuite上點右鍵或者在Edit區點Add Scalar或Add List來新增變量。

實際上也能夠看作另外一種形式的變量賦值,通常至關於使用Set Variable進行初始化賦值。
 
三、變量賦值
1)Set 賦值
一般這種方式主要使用Set Variable或相似的使用了Set的關鍵字對變量進行賦值。例如:

2)Get 賦值
主要用於返回值上,包括系統關鍵字的返回值和用戶關鍵字的返回值(從廣義上說,Set那個也是返回值),例如:

3)運行時賦值
詳見流程與數據分離最後一篇,使用小v 的argument。

好比以上的一個case,在ride的RUN頁面中,在Arguments欄輸入參數 -v testURL:http://www.baidu.com/ -v searchText:啦啦啦,接着運行,這個是運行時賦值;
特別注意:若是一個變量沒有通過賦值,使用時會報錯的。
 
四、變量的做用域
 一般狀況下,每一個變量默認都是局部變量。
一個case裏的變量,做用域在這個case內部;
一個userkeyword裏的變量,做用域在這個userkeyword內部;
一個文件型suite裏的變量,做用域在這個suite內部,全部下面的case也均可以使用。
一個目錄型suite裏的變量,做用域在這個目錄內,他下面的文件型suite是沒法使用的,因此通常在目錄下新增變量沒有太大意義。
做用域是能夠修改的,即經過一些系統關鍵字,對變量進行做用域的設定,經常使用的關鍵字有:
Set Global Variable ——設定全局級變量
Set Suite Variable ——設定suite級變量
Set Test Variable ——設定case級變量
 
2.2.19.2 變量的使用
其實使用變量我以爲不須要說太多了,變量的賦值能夠看一下用戶關鍵字的返回值部分,裏面的單個返回值和多個返回值其實就是給單個變量賦值和多個變量賦值的例子了。
這裏再列幾種以前沒有寫過的例子吧。
一、在判斷中使用

例如這樣寫,在第二行的判斷中能夠直接寫判斷條件,如今的條件成立,因而運行結果以下:

 
二、字符串使用
若是想把變量做爲一個字符串的一部分,能夠直接這樣寫

運行結果以下:

 
實際上默認狀況下RF裏的變量都是字符型的,而且兩個字符串鏈接不要加什麼符號,直接連起來就好了。
若是你寫成aaa+${text}bbb,最終結果就是aaa+123bbb,他會把你寫的任何內容都看成字符串的。
 
三、參與運算
看了上面的例子以後,可能有人說我想用123做爲數值進行計算該怎麼用。
這裏要用到一個關鍵字Evaluate。先看個例子:

運行結果以下:

 
他的做用是可讓你加載Python的一些庫,依賴於Python的語法,至關於直接運行對應的Python語句獲得結果。
像上面的例子沒有加載庫,由於加減乘除這些是Python基本庫就有的。下面放一個加載Python庫的,以下圖,他加載了random和sys兩個庫,並使用相應的語句生成一個隨機數。

運行結果:

具體能夠參考一下RF的userguide文檔中BuiltIn部分。
2.2.20 Run Keyword If 條件分支

判斷條件,分支執行,常常用到
裏面的 condition會用python語法進行判斷,至關於執行了evaluate(下一講會講到)。那麼具體的能夠在http://docs.python.org/lib/truth.html.查到。
經常使用的貼幾個:
Operation Result Notes
x or y if x is false, then y, else x (1)
x and y if x is false, then x, else y (2)
not x if x is false, then True, else False (3)
Operation Meaning Notes
< strictly less than
<= less than or equal
> strictly greater than
>= greater than or equal
== equal
!= not equal
is object identity
is not negated object identity

!=也可用<>,可是建議都用!=
條件里加上數學運算也能夠,我就不一一列舉了。
2.2.20 For循環(參考齊濤-道長博客)
這個功能一直就在系統裏支持,只是FOR的寫法有點特殊,要在前面加上冒號。直接在F5的關鍵字搜索裏是找不到的,可是關鍵字搜索裏能找到的是EXIT FOR LOOP,當時看到這個關鍵字就想到了應該是有FOR循環的,不然也不會有一個退出循環的關鍵字了。
FOR循環結構以下:
:FOR 循環變量 IN RANGE  end
:FOR 循環變量 IN RANGE start end step
循環體爲接下來的縮進代碼

:FOR 循環變量 IN  a <b,c,...>
循環體爲接下來的縮進代碼
 
仍是先貼上2個例子。
一、IN RANGE:

 IN RANGE主要是用一個整數序列作循環的計數器,如圖的IN RANGE 10,運行時就是從0到9,若是寫IN RANGE 1  10,那就是從1-9。
須要注意的就是RANGE裏不會執行到最後那個數字,也就是10是不執行的,到9就結束了。若是你想執行到10,那就寫IN RANGE 11。
若是IN RANGE後面只寫一個數字N,那麼就是從0到N-1的整數序列。
固然既然是序列也能夠加step步進,即序列的間隔。若是要加step,就必須把起始和結束的數字都寫上,而後在後面寫上step,能夠是正數也能夠是負數,以下圖就是一個負數step的例子:

 
二、IN:

IN的用法就比較自由了,你能夠把IN後面的內容理解爲一個LIST變量的所有元素,這個循環至關於遍歷每一個元素。這裏的元素能夠是字符串,也能夠是數值,隨意。
因此你能夠像我那樣把元素直接寫出來,也能夠直接放一個@{}的LIST變量。好比下面這樣:

運行結果以下:

 
具體使用IN仍是IN RANGE看具體須要,我只提供例子,你們自行選擇具體方法。
好比你寫IN  1  2  3  4  5  6 7 8 9 就不如直接用IN RANGE 1 10,效果都同樣,像我這樣的懶人確定願意用後者。
 
三、雙重循環
之前寫vbs的FOR循環能夠這樣寫:
FOR  i=1 to 10
    FOR J=1 to 8
       do something
    next J
next i
可是目前RF這裏的FOR循環沒法直接支持這樣作,只能間接的作。
首先另外新增一個user keyword,好比我下面這個forJ

 
而後在前面那個for循環裏調用這個forJ,這樣就實現出了上面那種效果了。

運行結果,太長了,只貼最後的部分吧。

 
若是要在forJ裏使用變量${i}的值,能夠把forJ加上一個入參,把${i}傳過去就行了
2.2.21 日期計算

用get time

相關文章
相關標籤/搜索