本文主要講解關於selenium自動化測試框架的入門知識點,教大家如何搭建selenium自動化測試環境,如何用selenium+python+unittest實現web頁面的自動化測試,先來看看selenium、unittest是什么。
一、selenium、unittest概念
Selenium 是用於測試 Web 應用程序用戶界面 (UI) 的常用框架。它是一款用於運行端到端功能測試的超強工具。您可以使用多個編程語言編寫測試,並且 Selenium 能夠在一個或多個瀏覽器中執行這些測試,同時支持所有基於web 的管理任務自動化。
unittest是單元測試框架,不僅適用於單元測試,還可以適用WEB自動化測試用例的開發與執行,該測試框架可組織執行測試用例,並且提供了豐富的斷言方法,斷言,其實就是對測試結果進行校驗,每一個測試用例都有一個期望結果,實際結果跟期望結果不一致,說明執行測試用例不通過,自動化測試也一樣,需要對測試結果進行校驗,校驗成功,說明用例已經通過,最終生成測試結果。
二、環境搭建:
安裝python:
下載鏈接:https://www.python.org/getit/
安裝python編譯器pycharm
http://www.jetbrains.com/pycharm/download/index.html#section=windows
安裝selenium模塊:
win+r 輸入cmd
python -m pip install selenium
假如用的是Chrome瀏覽器,還需要下載chromedriver.exe,chromedriver版本與支持的Chrome瀏覽器版本對應如下:
下載鏈接:http://npm.taobao.org/mirrors/chromedriver/
下載完成后,拷貝chromedriver.exe到Chrome瀏覽器安裝目錄下:
隨后配置環境變量:
三、編寫一個簡單的自動化測試腳本
好了,環境已經搭建好了,我們開始寫測試用例,來看一下對百度頁面寫一個簡單的自動化測試腳本
#coding=utf-8 #百度demo from selenium import webdriver import time #單元測試框架,使用該模塊,我們可以對用例進行組織和運行,例如如下的BaiduTestCase類繼承unittest.TestCase,該類執行會把test開頭的方法當成一個測試用例去執行 import unittest class BaiduTestCase(unittest.TestCase): def setUp(self): print('開始執行測試用例:') url = 'https://www.baidu.com' self.driver = webdriver.Chrome()#選擇谷歌瀏覽器 self.driver.get(url)#打開百度頁面 def test_bubutton(self): self.driver.find_element_by_id('kw').clear() self.driver.find_element_by_id('kw').send_keys('軟件測試')#搜索框輸入內容 self.driver.find_element_by_id('su').click()#點擊百度按鈕 time.sleep(2) self.driver.save_screenshot('D:/baidu.png')#截圖 def tearDown(self): print('一條用例執行完成。') self.driver.quit()#退出瀏覽器 if __name__=='__main__': unittest.main()
通過上面的一段代碼我們就可以實現跳轉到百度頁面,輸入‘軟件測試’,點擊百度按鈕並且搜索,設置停留在搜索結果頁面2秒鍾,隨后截圖放到設置的路徑,是不是覺得挺簡單的呢,但是想要學習更多的自動化測試知識,還是需要更多地熟悉selenium、unittest的api。
三、熟悉一些常用的元素定位方法、操作方法
常用元素定位方法:
1、id定位: find_element_by_id()
舉例:進入瀏覽器,按f12,定位元素id如下如步驟:
2、name定位: find_element_by_name()
3、class定位:find_element_by_class_name()
4、link定位:find_element_by_link_text()
5、partial_link定位:find_element_by_partial_link_text()
6、xpath定位:find_element_by_xpath()
7、CSS定位:find_element_by_css_selector()
操作方法:
clear 清除元素的內容
send_keys 模擬按鍵輸入
click 點擊元素
submit 提交表單
size 獲取元素的尺寸
text 獲取元素的文本
get_attribute(name) 獲取屬性值
location 獲取元素坐標,先找到要獲取的元素,再調用該方法
page_source 返回頁面源碼
driver.title 返回頁面標題
current_url 獲取當前頁面的URL
is_displayed() 設置該元素是否可見
is_enabled() 判斷元素是否被使用
is_selected() 判斷元素是否被選中
tag_name 返回元素的tagName
context_click(elem) 右擊鼠標點擊元素elem,另存為等行為
double_click(elem) 雙擊鼠標點擊元素elem,地圖web可實現放大功能
drag_and_drop(source,target) 拖動鼠標,源元素按下左鍵移動至目標元素釋放
move_to_element(elem) 鼠標移動到一個元素上
click_and_hold(elem) 按下鼠標左鍵在一個元素上
perform() 在通過調用該函數執行ActionChains中存儲行為
send_keys(Keys.ENTER) 按下回車鍵
send_keys(Keys.TAB) 按下Tab制表鍵
send_keys(Keys.SPACE) 按下空格鍵space
send_keys(Kyes.ESCAPE) 按下回退鍵Esc
send_keys(Keys.BACK_SPACE) 按下刪除鍵BackSpace
send_keys(Keys.SHIFT) 按下shift鍵
send_keys(Keys.CONTROL) 按下Ctrl鍵
send_keys(Keys.ARROW_DOWN) 按下鼠標光標向下按鍵
send_keys(Keys.CONTROL,‘a’) 組合鍵全選Ctrl+A
send_keys(Keys.CONTROL,‘c’) 組合鍵復制Ctrl+C
send_keys(Keys.CONTROL,‘x’) 組合鍵剪切Ctrl+X
send_keys(Keys.CONTROL,‘v’) 組合鍵粘貼Ctrl+V
unittest常用斷言方法:
assertLocation(判斷當前是在正確的頁面)、
assertTitle(檢查當前頁面的 title 是否正確)、
assertValue(檢查 input 的值, checkbox 或 radio,有值為”on”無為”off”)、
assertSelected(檢查 select 的下拉菜單中選中是否正確)、
assertSelectedOptions(檢查下拉菜單中的選項的是否正確)、
assertText(檢查指定元素的文本)、
assertTextPresent(檢查在當前給用戶顯示的頁面上是否有出現指定的文本)、
assertTextNotPresent(檢查在當前給用戶顯示的頁面上是否沒有出現指定的文本)、
assertAttribute(檢查當前指定元素的屬性的值)、
assertTable(檢查 table 里的某個 cell 中的值)、
assertEditable(檢查指定的 input 是否可以編輯)、
assertNotEditable(檢查指定的 input 是否不可以編輯)、
assertAlert(檢查是否有產生帶指定 message 的 alert 對話框)、
verifyTitle驗證預期的頁面標題。
verifyTextPresent驗證預期的文本是否在頁面上的某個位置。
verifyElementPresent驗證預期的 UI 元素,它的 HTML 標簽的定義,是否在當前網頁上。
verifyText核實預期的文本和相應的 HTML 標簽是否都存在於頁面上。
verifyTable驗證表的預期內容。
waitForPageToLoad 暫停執行,直到預期的新的頁面加載