《Selenium自動化測試實戰:基於Python》之 Selenium IDE插件的安裝與使用
第3章 Selenium IDE插件的安裝與使用

京東://item.jd.com/13123910.html
噹噹://product.dangdang.com/29204520.html
可以在Chrome或Firefox瀏覽器的附加組件中找到Selenium IDE插件並進行安裝。這裡以Firefox瀏覽器為例,查找selenium,就會出現Selenium IDE插件,如圖3-1所示。
圖3-1 Selenium IDE插件的相關信息
3.1 Selenium IDE插件的安裝
找到Selenium IDE插件後,進行安裝即可,由於安裝過程非常簡單,這裡不再贅述。安裝完畢後,工具條上就會出現Selenium IDE插件圖標,如圖3-2所示。
圖3-2 Firefox瀏覽器的工具條上的Selenium IDE插件圖標
3.2 Selenium IDE的使用
單擊Selenium
IDE插件圖標,將出現圖3-3所示的對話框。
圖3-3
Selenium IDE的歡迎使用對話框
從圖3-3可以看出,目前Selenium IDE插件的版本是3.16.1,單擊Record a new test in
a new project鏈接。
在彈出的新項目名稱對話框中,設置PROJECT NAME為「異步社區」,如圖3-4所示,而後單擊OK按鈕。
圖3-4
新項目名稱對話框
在彈出的項目URL對話框中,輸入異步社區的網址//www.epubit.com,如圖3-5所示。
單擊START RECORDING按鈕,開始錄製腳本。
如圖3-6所示,我們可以看到在錄製時,頁面的右下角有一個圓角矩形框,用來標識Selenium IDE正在進行錄製。在這裡,我以演示訪問人民郵電出版社的異步社區為例。你在操作的同時,將發現Selenium IDE會產生對應的腳本信息,並展現在Selenium IDE中。如果已經完成錄製,就單擊Selenium IDE中的「停止錄製」按鈕,如圖3-7所示。
圖3-5 項目URL對話框
圖3-6 Selenium IDE正在錄製異步社區頁面信息
圖3-7 Selenium IDE停止錄製異步社區頁面信息
接下來,命名測試用例,輸入epubit,如圖3-8所示,單擊OK按鈕。
圖3-8
為測試用例起名字
在圖3-9所示的頁面中,單擊Save project按鈕,保存項目。
圖3-9
保存項目
至此,我們完成了基於異步社區查找業務的相關操作,可以單擊Run current test(回放)按鈕來回放腳本,如圖3-10所示。
圖3-10
Run current test回放按鈕
在回放過程中,你將發現Selenium IDE會自動打開一個新的Firefox瀏覽器窗口,並嚴格執行當初錄製的相關業務操作,同時Selenium IDE下方的Log選項卡將顯示每個步驟及其執行後的狀態和時間信息,如圖3-11所示。
圖3-11
腳本回放的相關信息
當然,如果錄製了很多測試用例,還可以單擊Run current test按鈕前面那個帶3條橫線的批量運行按鈕(圖3-12中編號為1的工具條按鈕)來批量執行測試用例。若我們不希望腳本從頭開始執行,而希望從某一步開始繼續執行(特別是在調試腳本時),可以單擊Run current test按鈕後面的那個包含兩個圓圈和一個向下箭頭的按鈕(圖3-12中編號為2的工具條按鈕)。如果對腳本的執行速度不滿意,可以單擊鬧鐘圖標(圖3-12中編號為3的工具條按鈕),調整執行速度。
如果需要對已生成的腳本內容進行完善,那麼可以對腳本進行二次修改或調試。單擊腳本區域中3個豎排的小圓點,就會彈出一個快捷菜單,如圖3-13所示。可以使用這個快捷菜單,對生成的腳本執行剪切、複製、粘貼、刪除操作,還可以插入新的命令或者清除所有命令(也就是清空腳本),甚至可以加入斷點、從指定的腳本行回放、回放到指定腳本行、從指定的行開始錄製。
圖3-12
工具條按鈕
圖3-13
快捷菜單
一行命令由Command、Target和Value三部分構成,如圖3-14所示。
圖3-14
命令信息
- Command(命令):Selenium IDE提供的相關命令。
- Target(目標):Selenium IDE要操作的對象。
- Value(值):針對要操作的對象進行賦值。
可以選中一條命令,對它進行編輯,如圖3-15所示。
圖3-15
編輯命令
結合Selenium
IDE錄製產生的腳本,可以看到Command列包含open、click、type、mouse over、mouse out和run script等關鍵詞。它們代表什麼呢?為方便讀者理解,這裡對Selenium IDE的命令關鍵詞進行了整理,供大家參考,參見表3-1。
表3-1 Selenium IDE的命令關鍵詞
命令關鍵詞 |
簡要說明 |
add |
用來增加選項 |
answer on |
通知Selenium返回下一個提示,提示信息為提示符指定的答案字符串 |
assert |
斷言,檢查變量是否為預期值。如果斷言失敗,測試將停止 |
assert |
斷言,確認提示信息中包含指定的文本。如果斷言失敗,測試將停止 |
assert |
斷言,確認指定的元素已被選中。如果斷言失敗,測試將停止 |
assert |
斷言,確認出現指定的文本信息。如果斷言失敗,測試將停止 |
assert |
斷言,確認目標元素是可編輯的。如果斷言失敗,測試將停止 |
assert |
斷言,確認目標元素存在於頁面上的某處。如果斷言失敗,測試將停止 |
assert |
斷言,確認目標元素不在頁面上的任何地方。如果斷言失敗,測試將停止 |
assert not |
斷言,確認目標元素沒被選中。如果斷言失敗,測試將停止 |
assert not |
斷言,確認目標元素不可編輯。如果斷言失敗,測試將停止 |
續表
命令關鍵詞 |
簡要說明 |
assert not |
斷言,確認下拉元素中所選選項的value屬性不包含提供的值。如果斷言失敗,測試將停止 |
assert not |
斷言,確認元素的文本不包含指定的值。如果斷言失敗,測試將停止 |
assert |
斷言,確認已呈現JavaScript提示。如果斷言失敗,測試將停止 |
assert |
斷言,確認下拉元素中所選選項的value屬性包含指定的值。如果斷言失敗,測試將停止 |
assert |
斷言,確認下拉菜單中所選選項的標籤包含指定的值。如果斷言失敗,測試將停止 |
assert |
斷言,確認元素的文本包含指定的值。如果斷言失敗,測試將停止 |
assert |
斷言,確認當前頁面的標題包含提供的文本。如果斷言失敗,測試將停止 |
assert |
斷言,確認輸入字段的(空白修飾)值(或其他帶有value參數的值)。對於複選框/單選按鈕元素,根據是否選中元素,元素值為 |
check |
針對單選框或複選框,切換選擇 |
choose |
通知Selenium返回下一個提示時返回取消信息 |
choose |
通知Selenium返回下一個提示時執行取消操作 |
choose ok |
通知Selenium返回下一個提示時執行確認操作 |
click |
單擊目標元素 |
click at |
根據坐標單擊目標元素。這裡的坐標主要相對於目標元素而言,例如,(0,0)表示元素的左上角 |
close |
關閉當前窗口 |
debugger |
中斷執行並進入調試器 |
do |
創建一個至少執行一次命令的循環 |
double |
雙擊目標元素 |
double |
根據坐標雙擊目標元素。這裡的坐標主要相對於目標元素而言,例如,(0,0)表示元素的左上角 |
drag and |
拖動一個元素並將其拖放到另一個元素上 |
echo |
將指定的消息顯示到Selenese表中的第三個單元格中,這對於調試很有用 |
edit |
設置內容可編輯的元素的值,就像鍵入的一樣 |
else |
if塊的一部分。如果不滿足if和/或else |
else if |
if塊的一部分。如果不滿足if條件,請在此分支執行命令 |
end |
終止控制流塊,if、while等語句的結束標誌 |
execute |
在當前選定的框架或窗口的上下文中執行一段JavaScript代碼 |
續表
命令關鍵詞 |
簡要說明 |
execute |
在當前選定的框架或窗口的上下文中執行JavaScript的異步代碼段 |
for each |
創建一個循環,為給定集合中的每一項執行相關塊內的命令 |
if |
if語句,當滿足條件時執行控制流塊內容 |
mouse down |
模擬用戶按下鼠標左鍵(尚未釋放鼠標左鍵) |
mouse down |
模擬用戶在指定位置按下鼠標左鍵(尚未釋放鼠標左鍵) |
mouse move |
模擬用戶在指定元素上按下鼠標左鍵(尚未釋放鼠標左鍵) |
mouse out |
模擬用戶將鼠標指針從指定元素上移開 |
mouse over |
模擬用戶將鼠標指針懸停在指定元素上 |
mouse up |
模擬用戶釋放鼠標左鍵時發生的事件 |
mouse up |
模擬當用戶在指定位置釋放鼠標左鍵時發生的事件 |
open |
打開指定的URL,然後等待頁面加載,同時接收相對URL和絕對URL |
pause |
等待指定的時間,以毫秒為單位 |
remove |
從多選元素中刪除選中的元素 |
repeat if |
如果提供的條件表達式的結果為true,開始do循環;否則,結束do循環 |
run |
從當前項目運行測試用例 |
run script |
在當前測試窗口的主體中創建一個新的script標籤,並將指定的文本添加到命令主體中 |
select |
從下拉菜單中選擇一個元素 |
select |
在當前窗口中選擇一個框架 |
select |
選擇窗口,在選擇指定的窗口後,所有命令都將轉到該窗口 |
send keys |
模擬指定元素上的按鍵事件,就像逐個鍵入一樣 |
set speed |
設置操作步驟間的執行速度,以毫秒為單位 |
set window |
設置瀏覽器的窗口大小 |
store |
將目標字符串另存為變量,便於復用 |
store |
獲取元素屬性的值 |
store text |
獲取元素的文本並存儲以備後用 |
store |
獲取當前頁面的標題 |
store |
獲取元素的值並存儲以備後用 |
store |
獲取當前頁面的句柄 |
store |
獲取與指定XPath匹配的節點數 |
submit |
提交指定的表單內容 |
續表
命令關鍵詞 |
簡要說明 |
times |
創建一個指定循環次數的循環 |
type |
設置要操作的目標元素的值,就像在其中鍵入一樣。也可以用於設置組合框、複選框的值。在這些情況下,value應該是所選選項的值而不是可見的文本 |
uncheck |
取消選中切換按鈕(複選框/單選按鈕) |
verify |
軟斷言變量是期望值。可將變量的值轉換為字符串,然後再進行比較,即使驗證失敗,測試也將繼續 |
verify |
軟斷言確認指定的元素已被選中。即使驗證失敗,測試也將繼續 |
verify |
軟斷言確認指定的輸入元素是否可編輯。即使驗證失敗,測試也將繼續 |
verify |
軟斷言確認指定的元素在頁面上的某處。即使驗證失敗,測試也將繼續 |
verify |
軟斷言確認指定的元素不在頁面上。即使驗證失敗,測試也將繼續 |
verify not |
軟斷言確認指定的元素未被選中。即使驗證失敗,測試也將繼續 |
verify not |
軟斷言確認指定的元素不可編輯。即使驗證失敗,測試也將繼續 |
verify not |
軟斷言確認指定的元素尚未選擇。即使驗證失敗,測試也將繼續 |
verify not |
軟斷言元素的文本不存在。即使驗證失敗,測試也將繼續 |
verify |
對指定元素中的選定選項進行軟斷言。即使驗證失敗,測試也將繼續 |
verify |
軟斷言確認指定的元素已被選擇。即使驗證失敗,測試也將繼續 |
verify |
軟斷言存在元素的文本。即使驗證失敗,測試也將繼續 |
verify |
軟斷言當前頁面的標題包含指定的文本。即使驗證失敗,測試也將繼續 |
verify |
軟斷言輸入字段的(空白修飾)值(或其他任何帶有value參數的字段)。對於複選框/單選按鈕元素,根據是否選中元素,元素值為on或off。即使驗證失敗,測試也將繼續 |
wait for |
等待元素可編輯 |
wait for |
等待元素不可編輯 |
wait for |
等待目標元素不在頁面上 |
wait for |
等待目標元素在頁面上不可見 |
wait for |
等待目標元素出現在頁面上 |
wait for |
等待目標元素在頁面上可見 |
while |
while循環,只要指定的條件表達式為真,就循環執行控制流塊的相關命令 |
Selenium IDE具有語法檢查功能,例如,如果添加一個沒有條件和結束語句的while循環,這個while循環將顯示為紅色,並在日誌中給出相應的錯誤消息,如圖3-16所示(箭頭指向的內容實際顯示為紅色,彩色效果參見文前彩插)。
圖3-16
語法檢查異常出現的相關信息
3.3 Selenium IDE的腳本保存與Python腳本轉換
Selenium IDE的測試用例都將保存為以.side為後綴的文件,如epubit.side。現在讓我們打開該文件看一下。大家不難發現,其實它就是一個JSON格式的文件,如圖3-17所示。
圖3-17
epubit.side文件的內容
同時,如果需要,還可以將這個文件導出成其他格式的腳本文件,選中對應的測試用例文件,單擊後面豎排的3個小圓點,在彈出的快捷菜單中選擇Export菜單項,如圖3-18所示。
圖3-18
選擇Export菜單項
在彈出的語言選擇對話框中,可以選擇導出指定語言的腳本,如圖3-19所示。
圖3-19
語言選擇對話框
這裡,我們選擇導出為Python pytest類型的腳本文件,並命名為test_epubit.py,如圖3-20所示。
圖3-20 導出為Python腳本文件
導出後的test_epubit.py文件如圖3-21所示。
圖3-21 test_epubit.py文件的內容
test_epubit.py文件的內容如下所示。
import pytest
import time
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
class TestEpubit():
def setup_method(self, method):
self.driver = webdriver.Firefox()
self.vars = {}
def teardown_method(self, method):
self.driver.quit()
def test_epubit(self):
self.driver.get(“//www.epubit.com/”)
self.driver.set_window_size(1550, 838)
self.driver.find_element(By.CSS_SELECTOR,
“.router-link-exact-active > .tabbar-link”).click()
self.driver.find_element(By.CSS_SELECTOR, “li:nth-child(2) .tabbar-link”).click()
self.driver.find_element(By.CSS_SELECTOR, “li:nth-child(1) .tabbar-link”).click()
self.driver.execute_script(“window.scrollTo(0,0)”)
self.driver.find_element(By.CSS_SELECTOR, “.icon-sousuo”).click()
self.driver.find_element(By.CSS_SELECTOR,
“.el-input-group > .el-input__inner”). click()
self.driver.find_element(By.CSS_SELECTOR,
“.el-input-group > .el-input__inner”).send_keys (“loadrunner”)
self.driver.find_element(By.CSS_SELECTOR, “.searchProduct > span”).click()
element = self.driver.find_element(By.CSS_SELECTOR, “.searchProduct > span”)
actions = ActionChains(self.driver)
actions.move_to_element(element).perform()
element = self.driver.find_element(By.CSS_SELECTOR, “body”)
actions = ActionChains(self.driver)
actions.move_to_element(element, 0, 0).perform()
self.driver.find_element(By.CSS_SELECTOR, “.item:nth-child(1) > .imgItem > img”).click()
self.driver.execute_script(“window.scrollTo(0,0)”)
從以上腳本中可以看到引入的pytest模塊,要運行這個腳本,就必須安裝pytest模塊。pytest模塊的安裝命令如圖3-22所示。
圖3-22 pytest模塊的安裝命令
在核心的test_epubit方法中,可以看到這裡主要使用了CSS元素定位法,並且執行了一些單擊、滾動和輸入操作,即便現在看不懂,也沒有關係。後續章節將詳細介紹這些元素定位和操作方法。
3.4 Selenium命令行運行器
持續集成、持續構建已經越來越多地被運用到互聯網企業,命令行的支持對於持續集成來講是非常有意義的。Selenium命令行運行器(Command-Line Runner)就是一個可以在命令行執行的小工具。
有了Selenium命令行運行器,不需要寫任何代碼,就能夠做到在任何瀏覽器中運行Selenium IDE的所有測試用例,並且既可以並發執行,也可以配合Selenium Grid使用。
現在就讓我們來看一下,如何利用Selenium命令行運行器驅動我們前面完成的異步社區搜索項目腳本(epubit.side文件)。
首先,需要安裝Node.js。可以到Node.js官網下載最新版本並安裝,下載時注意一定要和自身操作系統的版本匹配,如圖3-23所示。
圖3-23
Node.js下載頁面信息
下載對應的版本後,安裝Node.js,由於安裝過程非常簡單,這裡不再贅述。安裝完成後,程序組中將出現圖3-24所示的信息。
圖3-24
程序組中的Node.js相關信息
為了驗證Node.js是否正確安裝,可以輸入node -v來查看Node.js的版本信息,如圖3-25所示。若顯示版本信息,則表示已安裝成功。
圖3-25
Node.js版本信息
接下來,為了更加便捷、快速地對相關包進行管理,需要安裝cnpm。輸入如下命令,如圖3-26所示。
圖3-26
安裝cnpm
而後,使用cnpm安裝Selenium命令行運行器,如圖3-27所示。
圖3-27
安裝Selenium命令行運行器
另外,還需要下載瀏覽器驅動程序,這裡我們使用Firefox瀏覽器驅動程序,對應的cnpm命令如圖3-28所示。當然,可以依據需要自行下載其他瀏覽器驅動程序。
圖3-28
下載Firefox瀏覽器驅動程序
可以輸入selenium-side-runner來查看幫助信息,如圖3-29所示。
圖3-29
查看幫助信息
如圖3-30所示,可以通過使用selenium-side-runner命令的-c參數來指定使用Firefox瀏覽器驅動程序,而後指定腳本的存放路徑以執行腳本。接下來,就可以通過Firefox瀏覽器驅動程序來調用並完成腳本的回放。
圖3-30
調用epubit.side腳本
如果存在多個side文件,那麼可以通過指定side文件的存放路徑來批量執行,例如selenium- side-runner -c
“browserName=firefox” c:\\testcases\\*.side,這樣就可以批量執行c:\testcases目錄下的所有測試用例了。當然,依據需要將已經完成的測試用例按不同的功能模塊分別放到不同的目錄中,或者針對不同測試用例的優先級別分別放到不同的目錄中,就可以選擇性地執行自己想要執行的測試用例集了。
當然,selenium-side-runner命令還提供了很多其他參數,如果需要進一步了解,可以查看幫助信息,這裡不再贅述。
答疑解惑群:50788246