基於python語言的Selenium自動化測試
一、Selenium簡介
Selenium是一個web自動化應用測試工具,還支持所有的web的管理任務自動化。並且開源免費,也是一個web自動化輕量級框架。它支持多種瀏覽器、跨平臺、跨操作系統、支持多種編程語言編寫腳本,還能進行分布式測試用例的執行。
Selenium經歷三個版本,Selenium1、Selenium2、Selenium3。它不是單獨的一個工具,而是由一些類庫、插件、工具等組合而成。主要的工具:
Selenium IDE:Selenium IDE是嵌入火狐瀏覽器中的一個插件,主要用於瀏覽器操作失誤錄制與回放,而且錄制的腳本可以轉換成多種語言,可以通過轉換的語言進行開發測試腳本。初級學習人員可以先通過該插件入手學習Selenium自動化測試。
Selenium Grid:自動化輔助工具,能夠加快Web-APP的功能測試。
Selenium RC:Selenium 核心部分,能夠支持多種不同編程語言進行編寫自動化測試腳本,例如常用Java和python語言進行編寫selenium自動化測試腳本。
WebDriver:在Selenium 2.0版本中,新增加了WebDriver. WebDriver是專門針對各個瀏覽器而開發,取代了嵌入到被測Web應用中的JavaScript。與瀏覽器的緊密集成支持創建更高級的測試,避免了JavaScript安全模型導致的限制。除了來自瀏覽器廠商的支持,WebDriver還能夠利用操作系統級的調用來模擬用戶輸入。除了支持各個瀏覽器,還能支持安卓跟iPhone移動應用測試。
二、Windows測試環境的搭建
1、安裝Python
本文主要是基於python語言的自動化測試,首先要安裝python。在網絡上下載最新本的python3.6版本。如果Windows是32位,則選擇x86版本下載安裝,如果是64位操作系統,則選擇64版本。本文以64版本為例。下載完成後,雙擊安裝程序包進行安裝,一般選擇自定義安裝,並且勾選自動添加環境變量,如下圖所示:
(1)安裝過程跟安裝一般的軟件一樣操作,安裝完成之後可以在開始菜單中看到安裝好的python目錄,如下圖所示:
(2)安裝完成之後就可以打開自帶的IDLE編寫Python程序,如圖所示:
2、pip安裝
pip是一個安裝和管理python包的工具。導入一些python非內置的類庫、模塊、工具等就是用pip安裝。但現在版本的Python安裝包已集成pip,不需要我們另外進行安裝了。檢查python是否已經集成安裝pip,我們可以通過在安裝目錄下查看Script是否有pip.exe等文件,如下圖:如果有可以直接使用pip命令。
3、seleniumd安裝
上述所述安裝pip,就是為了方便安裝Selenium包。通過pip命令可以直接安裝Selenium包,不過在安裝Selenium時最好選擇低版本的,一般選擇Selenium2.0以上,Selenium3.0以下的版本比較合適。要想安裝selenium某個版本,需要在命令裏面指定版本號安裝,例如:
>>>pip install selenium==2.53.0
4、JetBrains PyCharm 安裝
JetBrains PyCharm是python開發環境的編譯器。PyCharm具備一般IDE的功能,比如, 調試代碼、語法高亮、Project管理、智能提示、單元測試等。
(1)首先下載安裝包,然後自定義安裝,按照一般軟件安裝即可。
(2)安裝好後首次使用需要進行配置,一般選擇默認即可。
(3)設置好後新建項目會提示選擇python版本,選擇我們安裝的路徑即可。如圖:
5、瀏覽器驅動安裝
WebDriver支持各種瀏覽器,但是需要安裝對應的瀏覽器驅動才能正常調用瀏覽器運行。根據自己的系統和瀏覽器下載不同版本的驅動,下載的驅動文件需要放置到系統環境變量Path下面,瀏覽器安裝文件下,例如火狐瀏覽器驅動,如圖:
三、selenium自動化測試基礎知識
1、調用瀏覽器驅動,訪問地址方法
driver = webdriver.Firefox()
driver.get("網址")
2、定位元素方法
Id 定位: find_element_by_id() id必須是唯一的
Name定位:find_element_by_name()
Class定位:find_element_by_class_name()
Tag 定位:find_element_by_tag_name()
Link定位:find_element_by_link_text() 專門定位文本鏈接
Partial link定位:find_element_by_partial_link_text()
Xpath定位:
(1)絕對路徑定位
find_element_by_xpath(“html/body/div/div[2]/div/div/div/from/span/input”)
(2)元素屬性定位:find_element_by_xpath(“//input[@id=’kw’]”)
(3)層級與屬性結合:find_element_by_xpath(“//form[@id=’form’]/span/input”)
(4)使用邏輯運算符find_element_by_xpath(“//input[@id=’kw’ and @class=’su’/span/input]”)
CSS 定位:
(1)通過class屬性定位:find_element_by_css_selector(“.s_ipt”)
(2)通過id屬性定位:find_elememt_by_css_selector(“#kw”)
(3)通過標簽名定位:find_element_css_selector(“input”)
1)通過父子關系定位:find_element_css_selector(“span>input”)
2)通過屬性定位:find_element_by_css_selector(“[name=’kw’]”)
3)通過組合定位:find_element_by_css_selector(“form.fm>span>input.s_ipt”)
By定位元素:find_element(By.ID,”kw”)
3、設置瀏覽器大小
driver.set_window_size(480, 800):設置瀏覽器大小(480,800)
4、提交輸入框數據
driver.find_element_by_id(‘txtUser‘).send_keys(‘黃文婷‘):提交登錄賬號黃文婷
5、鼠標操作
ActionChains 類提供的鼠標操作的常用方法:
perform() 執行所有ActionChains 中存儲的行為
context_click() 鼠標右擊
double_click() 鼠標雙擊
drag_and_drop() 鼠標拖動
move_to_element() 鼠標懸停
6、休眠方法
sleep(3):設置休眠3秒
7、表單切換
switch_to_frame() 默認可以直接取表單的id 或name 屬性進行切換。
8、多窗口切換
current_window_handle:獲得當前窗口句柄
window_handles:返回的所有窗口的句柄到當前會話
switch_to_window():用於切換到相應的窗口
9、處理警告框
text :獲取alert/confirm/prompt 中的提示信息。
Accept:點擊確認按鈕。
dismiss :擊取消按鈕。
四、簡單示例
以下是一個簡單的自動化登錄測試用例:
#coding=utf-8
from selenium import webdriver
import unittest
import time
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
class SouthInfoManagePlatform(unittest.TestCase):
def setUp(self):
print(‘開始執行測試用例‘)
self.driver = webdriver.Firefox()
self.driver.get("http://192.168.10.42:8787/")
def tearDown(self):
# self.driver.quit()
print(‘測試用例執行結束!‘)
def test_scenario_001(self):
"一個簡單的測試場景"
print(‘用戶登錄:‘)
self.driver.find_element_by_id(‘txtUser‘).clear()#取消默認賬號
self.driver.find_element_by_id(‘txtUser‘).send_keys(‘黃文婷‘)#用戶名
self.driver.find_element_by_id(‘txtUser‘).clear()
self.driver.find_element_by_id(‘txtPwd‘).send_keys(‘123‘)#密碼
logincode=self.driver.get_cookies()[1]["value"]
self.driver.find_element_by_xpath(".//*[@id=‘txtCheckCode‘]").send_keys(logincode)
#time.sleep(3)
self.driver.find_element_by_name(‘IbtnLogin‘).click()
time.sleep(3)
基於python語言的Selenium自動化測試