robot_framewok自動化測試--(8)SeleniumLibrary 庫(selenium、元素定位、關鍵字和分層設計)
SeleniumLibrary 庫
一、selenium
1.1、Selenium 介紹
Selenium 自動化測試工具,它主要是用於 Web 應用程式的自動化測試,但並不只侷限於此,同時支援所有基於 web 的管理任務自動化。 Selenium 的特點:- 開源,免費
- 多瀏覽器支援:FireFox、Chrome、IE、Opera
- 多平臺支援:linux 、windows、MAC
- 多語言支援:java、Python、Ruby、php、C#、JavaScript
- 對 web 頁面有良好的支援
- 簡單(API 簡單)、靈活(用開發語言驅動)
- 支援分散式測試用例執行
2.2、安裝 SeleniumLibrary
>pip install robotframework-seleniumlibrary在前面內容中已經知道了如何新增庫,現在我們將“SeleniumLibrary”庫新增到相應的測試套件中。 新增完成,黑色示新增的庫正常,紅色表示庫不存。如果為紅色,請檢查site-packages 目錄下是否有 Selenium2Library 目錄
1.3第一個例子
我們已經有了學習 Robot Framework 的經驗,通過按 F5 快捷鍵來查詢庫所提供的關鍵字。如上圖,自動化指令碼從開啟瀏覽器開如,我想開啟一個瀏覽器,自然想到的是以“open”為關鍵字進行搜尋,結果找到了一個“Open Browser”的關鍵字,點選這個關鍵字,顯示它的用法和說明。
根據說明,我們來嘗試建立這個開啟瀏覽器的操作吧,這裡跟新著我們寫一個 web 自動化測試用例(百度搜索用例):
執行結果:
Starting test: Test Project.Test Suit.baidu_search 20211107 22:53:51.920 : INFO : Opening browser 'firefox' to base url 'https://www.baidu.com'. 20211107 22:53:51.921 : INFO : Firefox driver log is always forced to to: C:\Users\yzp\AppData\Local\Temp\RIDE0vzfcxc0.d\geckodriver-3.log20211107 22:54:00.407 : INFO : Typing text 'robotframeworkѧϰ' into text field 'id=kw'. 20211107 22:54:00.632 : INFO : Clicking button 'id=su'. 20211107 22:54:05.906 : INFO : Slept 5 seconds Ending test: Test Project.Test Suit.baidu_search
二、元素定位
對於 Web 自動化測試來說,就是操作頁面上的各種元素,在操作元素之間需要先找到元素,換句話說就是定位元素。 SeleniumLibrary 提供了非常豐富的定位器:雖提供了這麼多種定位方式,並不是要求我們每一種都要學會。在這裡我只介紹 4 種定位方式,id、name、xpath 和 css。介紹 id 和 name,是因為這兩種定位方式非常簡單且實用,介紹 xpath 和 css,是因為這兩種定位方式足夠強大,可以滿足幾乎所有定位需求。
2.1前端工具
在學習定位之前,有必要先介紹一下瀏覽器的前端具。 firefox 瀏覽器可以通過 firebug 工具查檢視頁面元素。2.2 id 和 name 定位
假如把一個元素看作一個人的話,id 和 name 可以看作一個人的身份證號和姓名。當然,這些屬性值是否唯一要看前端工程師如何設計了。
根據上面的例子,百度輸入框可以取 id 或 name 進行定位。(前提是 id 和 name 的值在當頁面上唯一) id = kw1 name = wd 在 Robot framework 中就是這樣寫的:Input text 用於輸入框的關鍵字,“robot framework 學習”是要給輸入框輸入的內容。
百度按鈕只 id 資料可以利用: id=suClick Button 是按鈕點選的關鍵字。
2.3xpath 定位
XPath 是一種在 XML 文件中定位元素的語言。因為 HTML 可以看做 XML 的一種實現,所以 selenium使用者可是使用這種強大語言在 web 應用中定位元素。 假如,一個人沒身份證號沒名字怎麼找呢?想想你是怎麼找朋友吃飯的,他手機不通,電話不回呢?直接上他家去唄,那你一定有他家住址,xx 市 xx 區 xx 路 xx 號。xpath 就可以通過這種層級關係找到元素。(1)xpath 的絕對路徑:
xpath = /html/body/div[1]/div[4]/div[2]/div/form/span[1]/input
我們可以從最外層開始找,html 下面的 body 下面的 div 下面的第 4 個 div 下面的....input 標籤。通過一級一級的鎖定就找到了想要的元素。(2)xpath 的相對路徑:
絕對路徑的用法往往是在我們迫不得已的時候才用的。大多時候用相對路徑更簡便。- 元素本身:
- 找上級:
<form id="form1" class="fm" action="/s" name="f1"> <span class="bg s_ipt_wr"> <input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd" utocomplete="off">找爸爸: xpath = //span[@class=’bg s_ipt_w’]/input 如果爸爸沒有唯一的屬性,可以找爺爺: xpath = //form[@id=’form1’]/span/input 這樣一級一級找上去,直到 html ,那麼就是一個絕對路徑了。
- 布林值寫法:
2.4css 定位
CSS(Cascading Style Sheets)是一種語言,它被用來描述 HTML 和 XML 文件的表現。CSS 使用選擇器來為頁面元素繫結屬性。這些選擇器可以被 selenium 用作另外的定位策略。 CSS 可以比較靈活選擇控制元件的任意屬性,一般情況下定位速度要比 XPath 快,但對於初學者來說比較難以學習使用,下面我們就詳細的介紹 CSS 的語法與使用。 CSS 選擇器的常見語法:- 通過 class 屬性定位:
- 通過 id 屬性定位:
- 通過標籤名定位:
- 通過父子關係定位:
- 通過屬性定位:
- 組合定位:
Robot framework 中的寫法:
三、SeleniumLibrary 關鍵字
關於 Selenium2Library 的關鍵字,我們可以參考通過 F5查詢 Selenium2Library 關鍵字型檔:3.1瀏覽器驅動
通過不同的瀏覽器執行腳瀏覽器對應的關鍵字:
open browser 同樣也可以開啟本地 html 頁面,如:
備註:
- 要想通過不同的瀏覽開啟 URL 地址,一定要安裝瀏覽器相對應的驅動。
- chrome 的驅動為:chromedriver.exe 。
- IE 的驅動為:IEDriverServer.exe
- 瀏覽器預設為空時啟動 FireFox。
3.2 關閉瀏覽器
close browser 關閉當前的瀏覽器。close all browser 關鍵所有開啟的瀏覽器和快取重置3.3 瀏覽器最大化
Maximize Browser Window 關鍵字使當前開啟的瀏覽器全屏。3.4 設定瀏覽器視窗寬、高
get windows size 關鍵字用於打設定開啟瀏覽器的寬度和高度。以畫素為單位,第一個引數 800 表示寬 度,第二個引數 600 表示高度測試結果:
Starting test: Test Project.Test Suit.baidu_search 20211108 13:51:33.456 : INFO : Opening browser 'firefox' to base url 'https://www.baidu.com'. 20211108 13:51:33.457 : INFO : Firefox driver log is always forced to to: C:\Users\yzp\AppData\Local\Temp\RIDE_x45edr9.d\geckodriver-2.log 20211108 13:51:41.610 : INFO : Typing text 'robotframeworkѧϰ' into text field 'id=kw'. 20211108 13:51:42.123 : INFO : Clicking button 'id=su'. 20211108 13:51:42.465 : INFO : ${width} = 1295 20211108 13:51:42.465 : INFO : ${height} = 695 20211108 13:51:42.466 : INFO : 1295 20211108 13:51:42.467 : INFO : 695 20211108 13:51:47.474 : INFO : Slept 5 seconds Ending test: Test Project.Test Suit.baidu_search
3.5 文字輸入
input text 關鍵字用於向文字框內輸入內容。
xpath=//* [@] :表示元素定位,定位文字輸入框。3.6 點選元素
Click Element 關鍵字用於點選頁面上的元素,單擊任何可以點選按鈕、文字/圖片連線、複選框、單選 框、甚至是下拉框等。 xpath=//* [@] :表示元素定位,定位點選的元素。3.7 點選按鈕
ClickButton關鍵字用於點選頁面上的按鈕。
Xpath=//* [@] :表示元素定位,定位點選的按鈕。3.8 等待元素出現
Wait Until Page Contains Element 關鍵字用於等待頁面上的元素顯示出來。 Xpath=//* [@] :表示元素定位,這裡定位出現的元素 42 : 表示最長等待時間。 Error : 表示錯誤提示,自定義錯誤提示,如:“元素不能正常顯示”測試結果:
Starting test: Test Project.Test Suit.baidu_search 20211108 14:00:30.027 : INFO : Opening browser 'firefox' to base url 'https://www.baidu.com'. 20211108 14:00:30.028 : INFO : Firefox driver log is always forced to to: C:\Users\yzp\AppData\Local\Temp\RIDE_x45edr9.d\geckodriver-3.log 20211108 14:00:38.176 : INFO : Typing text 'robotframeworkѧϰ' into text field 'id=kw'. 20211108 14:00:38.519 : INFO : Clicking button 'id=su'. 20211108 14:00:38.867 : INFO : ${width} = 1295 20211108 14:00:38.867 : INFO : ${height} = 695 20211108 14:00:38.868 : INFO : 1295 20211108 14:00:38.869 : INFO : 695 20211108 14:00:43.879 : INFO : Slept 5 seconds Ending test: Test Project.Test Suit.baidu_search
3.9 獲取title
get title 關鍵字用於獲得當前瀏覽器視窗的 title 資訊。 這裡只獲取 title 是沒有意義的,我們通常會將獲取的 title 傳遞給一個變數,然後與預期結果進行比較。從而判斷當前指令碼執行成功。執行結果:
Starting test: Test Project.Test Suit.baidu_search 20211108 14:22:12.707 : INFO : Opening browser 'firefox' to base url 'https://www.baidu.com'. 20211108 14:22:12.710 : INFO : Firefox driver log is always forced to to: C:\Users\yzp\AppData\Local\Temp\RIDE_x45edr9.d\geckodriver-9.log 20211108 14:22:20.330 : INFO : Typing text 'robotframeworkѧϰ' into text field 'id=kw'. 20211108 14:22:20.718 : INFO : Clicking button 'id=su'. 20211108 14:22:21.052 : INFO : ${a} = 百度一下,你就知道 20211108 14:22:21.053 : INFO : 百度一下,你就知道 20211108 14:22:21.055 : INFO : ${width} = 1295 20211108 14:22:21.056 : INFO : ${height} = 695 20211108 14:22:21.056 : INFO : 1295 20211108 14:22:21.057 : INFO : 695 20211108 14:22:26.065 : INFO : Slept 5 seconds Ending test: Test Project.Test Suit.baidu_search
3.10 獲取text
get text 關鍵字用於獲取元素的文字資訊。 xpath=//* [@] : 定位文字資訊的元素。3.11獲取元素屬性值
id=kw@name:id=kw 表示定位的元素。@nam 獲取這個元素的 name 屬性值。
3.12cookei 處理
- get cookies 獲得當前瀏覽器的所有 cookie 。
- get cookie value 獲得 cookie 值。key_name 表示一對 cookie 中 key 的 name 。
- add cookie 新增 cookie。新增一對 cooke (key:value)
- delete cookie 刪除 cookie。刪除 key 為 name 的 cookie 資訊。
- delete all cookies 刪除當前瀏覽器的所有 cookies。
3.13 驗證
獲得瀏覽器 title 進行比較。
- Open Browser 通過 chrome 開啟百度首頁。
- Get Title 獲得瀏覽器視窗的 titile ,並賦值給變數${title}
- Should Contain 比較${title}是否等於“百度一下,你就知道”。
測試結果:
Starting test: Test Project.Test Suit.baidu_search 20211108 14:52:20.175 : INFO : Opening browser 'firefox' to base url 'https://www.baidu.com'. 20211108 14:52:20.176 : INFO : Firefox driver log is always forced to to: C:\Users\yzp\AppData\Local\Temp\RIDE_x45edr9.d\geckodriver-11.log 20211108 14:52:27.393 : INFO : ${title} = 百度一下,你就知道 20211108 14:52:27.426 : INFO : Typing text 'robotframework學習' into text field 'id=kw'. 20211108 14:52:27.842 : INFO : Clicking button 'id=su'. 20211108 14:52:29.741 : INFO : ${a} = robotframework學習_百度搜索 20211108 14:52:29.742 : INFO : robotframework學習_百度搜索 20211108 14:52:29.745 : INFO : ${width} = 1295 20211108 14:52:29.745 : INFO : ${height} = 695 20211108 14:52:29.746 : INFO : 1295 20211108 14:52:29.747 : INFO : 695 20211108 14:52:31.760 : INFO : Slept 2 seconds Ending test: Test Project.Test Suit.baidu_search獲得文字資訊進行比較
測試結果:
Starting test: Test Project.Test Suit.baidu_search 20211108 15:17:03.377 : INFO : Opening browser 'firefox' to base url 'https://www.baidu.com'. 20211108 15:17:03.379 : INFO : Firefox driver log is always forced to to: C:\Users\yzp\AppData\Local\Temp\RIDE_x45edr9.d\geckodriver-17.log 20211108 15:17:10.732 : INFO : ${title} = 百度一下,你就知道 20211108 15:17:10.754 : INFO : Typing text 'robotframework學習' into text field 'id=kw'. 20211108 15:17:11.217 : INFO : Clicking button 'id=su'. 20211108 15:17:19.166 : INFO : Slept 5 seconds 20211108 15:17:19.189 : INFO : ${text} = 幫助 20211108 15:17:19.194 : INFO : ${width} = 1295 20211108 15:17:19.194 : INFO : ${height} = 695 20211108 15:17:19.195 : INFO : 1295 20211108 15:17:19.205 : INFO : 695 20211108 15:17:21.209 : INFO : Slept 2 seconds Ending test: Test Project.Test Suit.baidu_search
3.14表單巢狀
有時候和頁面中會出現表單巢狀,這個時候需要進入到表單才能操作相關元素。
Select Frame 進入表單,Xpath=//* [@] 表示定位要進入的表單。
Unselect Frame 退出表單。3.15下拉框選擇
Unselect From List By Value 關鍵字用天選擇下拉框。 Xpath=//* [@] 定位下拉框; Vlaue 選擇下拉框裡的屬性值。3.16 執行 JavaScript
在一些特殊的情況下需要呼叫 JavaScript 程式碼。Execute Javascript 關鍵字用於使用 JavaScript 程式碼
四、Robot Framework 分層設計
談到 Robot Framework 分層的思想,就不得不提“關鍵字驅動”。 回到分層的思想上,在程式設計的講究設計模式,設計模式其實就是根據需求使用抽象與封裝,其實就是分層思想。把一個實現過程分成不同多層。提高的靈活性,從而達到可擴充套件性和可維護性。 再回到自動化的話題上,我們可以把操作步驟封裝一個一個的方法(關鍵字),通過呼叫關鍵字來實現測試用例。 參考前面建立的一條百度搜索的測試用例。1、建立資源
右鍵“測試專案”選擇“new resource”建立資源。
2、建立關鍵字
右鍵“業務關鍵字”選擇“new User Keyword” 來建立使用者關鍵字 輸入關鍵字的名稱:3、編輯關鍵字
分析:
對於一個測試用例來說,使用者關心的是輸入什麼內容,得到什麼結果。 所以,對於“百度搜索”關鍵字來說,需要建立兩個介面變數${search}和${result} 兩個變數,用於接收輸入內容和預期結果。 點選 Arguments 輸入框,定義變數,多個變數從用“|”隔開。 在百度使用者中使用引數化變數。4、新增建立的資源
切換到測試套件(Search)頁面,新增資源(業務關鍵字.txt)5、呼叫關鍵字
現在就可以在測試用例中使用建立的關鍵字了(百度搜索)。對於每一條用例來說,呼叫“百度搜索”關鍵字,輸入搜尋內容,輸入預期結果即可。不同關心用例是如何執行的。如果百度輸入框的定位發生了變化,只用去修改“百度搜索”關鍵字即可,不用對每一條用例做任何修改。大大提高的用例的維護性和擴充套件性。
繼續分層的設計:到此,Robot Framework +Selenium 自動化測試粗獷的講完了。當然還有更多 API 的使用,和細枝末節的設定沒有介紹。但我們已經可以拿它來開展自動化工作了。
本部落格所有文章僅用於學習、研究和交流目的,歡迎非商業性質轉載。
本文來自部落格園,作者:hello_殷,轉載請註明原文連結:https://www.cnblogs.com/yinzuopu/p/15522285.html
本文版權歸作者和部落格園共有,歡迎轉載,但必須給出原文連結,並保留此段宣告,否則保留追究法律責任的權利。