selenium自動化測試框架方式
一、Selenium自動化測試(基于python)
1、Selenium簡介
1.1 Selenium是一款主要用于Web應用程序自動化測試的工具集合。Selenium測試直接運行在瀏覽器中,本質(zhì)是通過驅(qū)動瀏覽器,模擬瀏覽器的操作,比如跳轉(zhuǎn)、輸入、點擊、下拉等,來拿到網(wǎng)頁渲染之后的結(jié)果,可支持多種瀏覽器如,chorme,F(xiàn)ireFox,IE等。
1.2 Selenium WebDriver:業(yè)界通用的測試框架,不僅是web測試的標準,同時在移動測試領域也是底層的核心驅(qū)動框架;
1.3 Python是動態(tài)語言;
1.4 Selenium包括一系列的工具組件:
- 1)Selenium IDE:是嵌入到FireFox瀏覽器的插件,用于在Firefox上錄制和回放Selenium腳本,雖然只能在Firefox下使用,但它能將錄制好的腳本轉(zhuǎn)換成各種Selenium WebDriver支持的程序語言,進而擴展到更廣泛的瀏覽器類型;
- 2) Selenium WebDriver:可支持多種語言,用于操作瀏覽器的一套API;支持各類型瀏覽器,跨操作系統(tǒng),WebDriver為諸多語言提供完備的,用于實現(xiàn)web自動化測試的第三方庫;
- 3) Selenium Standalone Server:包括Selenium Grid、遠程控制、分布式部署等,均可實現(xiàn)Selenium腳本的高效執(zhí)行與拓展;利用Grid使得自動化測試可以并行運行,甚至在跨平臺、異構(gòu)的環(huán)境中運行;
2、基于python的selenium WebDeriver環(huán)境安裝
Selenium可以自動操縱瀏覽器來做很多,如模擬與瀏覽器的交互,而且支持到多數(shù)主流瀏覽器;首先需要選擇一門語言來編寫自動化腳本,而這門語言需要有Selenium client library支持,選擇Python;
2.1 安裝python和selenium,不同安裝版本可在平臺下載
1)安裝selenium
- Win:pip install selenium
- Mac: pip3 install selenium
2)安裝WebDriver, 該工具供selenium使用Chrome。(注:webdriver需要和對應的瀏覽器版本以及selenium版本對應)

3)WebDriver安裝路徑
- Win:復制webdriver到Python安裝目錄下
- Mac:復制webdriver到/usr/local/bin目錄下
2.2 PyCharm設置
- 1)PyCharm有兩個版本:社區(qū)版和專業(yè)版,社區(qū)版是免費的,可以下載使用;
- 2) 在使用PyCharm時,需要配置Python的解釋器,我們選擇支持selenium的Python版本解釋器;

3、Selenium WebDriver基于Python實現(xiàn)腳本
3.1 根據(jù)webDriver提供的一系列對象定位方法,獲取元素,實現(xiàn)測試用例
3.2 webDriver常見的元素定位方法有:
- ① id定位:find_element_by_id()
- ② name定位:find_element_by_name()
- ③ class定位:find_element_by_class_name()
- ④ link定位:find_element_by_link_text()
- ⑤ partial link定位:find_element_by_partial_link_text()
- ⑥ tag定位:find_element_by_tag_name()
- ⑦ xpath定位:find_element_by_xpath()
- ⑧ css定位:find_element_by_css_selector()
4、unittest編寫單元測試并輸出測試報告
僅使用Selenium WebDriver,還有一些無法實現(xiàn)的:比如 實現(xiàn)執(zhí)行測試前置條件、測試后置條件,比對預期結(jié)果和實際結(jié)果,檢查程序的狀態(tài),生成測試報告等功能;因此需要使用unittest來創(chuàng)建基于Python的Selenium WebDriver測試腳本;
4.1 什么是unittest
Unittest一般也稱為PyUnit,是從java程序開發(fā)中廣泛應用的Unit啟發(fā)而來,可以使用unittest為項目創(chuàng)建全面的測試套件,unittest具備創(chuàng)建測試用例、測試套件,測試夾具的能力;
unitest組件:
- 1)Test Fixture(測試夾具):可以定義在單個或多個測試執(zhí)行之前的準備工作和測試執(zhí)行之后的清理工作;
- 2)Test Case(測試用例):unittest中執(zhí)行測試的最小單元,通過驗證unittest提供的assert方法來驗證一組特定的操作和輸入以后得到的響應,unittest提供了一個名為TestCase的基礎類,可以用來創(chuàng)建測試用例;
- 3)Test Suit(測試套件):一個測試套件是多個測試或測試用例的集合,是針對被測程序的對應的功能和模塊創(chuàng)建的一組測試,一個測試套件內(nèi)的測試用例將一起執(zhí)行;
- 4)Test Runner(測試執(zhí)行器):測試執(zhí)行器負責測試執(zhí)行調(diào)度并且生成測試結(jié)果給用戶,測試執(zhí)行器可以使用圖形界面、文本界面或者特定的返回值來展示測試執(zhí)行結(jié)果;
- 5)Test Report(測試報告):測試報告展示所有執(zhí)行用例的成功或者失敗狀態(tài)的匯總,包括失敗的測試步驟的預期結(jié)果和實際結(jié)果,還有整體運行狀況和運行時間的匯總;
4.2 使用unittest來編寫Selenium WebDriver測試
- 1)Arrange:初始化前置條件,初始化被測試的對象,相關(guān)配置和依賴;
- 2)Act:執(zhí)行功能操作;
- 3)Assert:用來校驗實際結(jié)果與預期結(jié)果是否一致;
4.3 使用TestCase類來實現(xiàn)一個測試
- 1)集成TestCase類并且在測試類中為每一個測試添加測試方法來創(chuàng)建單個測試或者一組測試;
- 2)TestCase中的assert方法,最主要的任務是 調(diào)用assertEqual()來校驗結(jié)果;assertTrue()來驗證條件;assertRaises來驗證預期的異常,除了添加測試,還可以添加測試夾具,setUp()方法和tearDown()方法;
- 3)一個測試用例是從setUp()方法開始執(zhí)行,因此可以在每個測試開始前執(zhí)行一些初始化的任務;此方法無參數(shù),也無返回值,接著編寫test方法,這些測試方法命名為test開頭,這種命名約定通知test runner哪個方法代表測試方法;
- 注:test runner能找到的每個測試方法,都會在執(zhí)行測試方法之前先執(zhí)行setUp()方法,這樣有助于確保每個測試方法都能夠依賴于相同的環(huán)境。
- 4)tearDown()方法會在測試執(zhí)行完成之后調(diào)用,用來清理所有的初始值;
- 5)為了能通過命令行測試,我們可以在測試中添加對main方法的調(diào)用;我們將傳遞verbosity參數(shù)以便使詳細的測試結(jié)果展示在控制臺;
測試用例代碼如下圖(Testcase01.py),如果測試通過則,瀏覽器最后會退出,如果出錯的話,控制臺則會打印出相關(guān)信息,

4.4 為一組測試創(chuàng)建TestSuite
- 1) 應用unittest的TestSuites特性,可以將不同的測試組成一個邏輯組,然后設置統(tǒng)一的測試套件,并通過一個命令來執(zhí)行;具體通過TestSuites、TestLoader和TestRunner類來實現(xiàn)的;
- 2)使用TestSuites類來定義和執(zhí)行測試套件,將多個可測試加到一個測試套件中,還可以用TestLoader和TextTestRunner創(chuàng)建和運行測試套件,舉例如下圖(TestSuites.py);

4.5使用unittest擴展來生成HTML格式的測試報告
unittest的擴展HTMLTestRunner可以實現(xiàn)生成測試報告。生成的的測試報告格式更加友好,既能夠查看測試結(jié)果,又能深入各個細節(jié)。舉例代碼如下圖(testsuiteshtml.py)

測試報告如下圖(TestReport)

總結(jié)
以上所寫內(nèi)容主要是selenium基于python,使用WebDriver、Unittest組件,使用元素定位方式,完成測試用例,輸出測試報告的簡單步驟,具體實際操作中可能會遇到其它問題,具體問題具體解決。
這些僅為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python 中Arduino串口傳輸數(shù)據(jù)到電腦并保存至excel表格
這篇文章主要介紹了python Arduino串口傳輸數(shù)據(jù)到電腦并保存至excel表格,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10
Python使用Tabulate庫實現(xiàn)格式化表格數(shù)據(jù)
在數(shù)據(jù)分析和軟件開發(fā)中,表格數(shù)據(jù)的展示是一個常見的需求,無論是簡單的數(shù)據(jù)報告,還是復雜的數(shù)據(jù)可視化,表格都是一種直觀且有效的信息展示方式,tabulate庫是一個非常實用的工具,它可以幫助我們輕松地將數(shù)據(jù)格式化為各種表格形式,本文將詳細介紹tabulate庫的使用方法2025-02-02
玩轉(zhuǎn)串口通信:利用pyserial庫,Python打開無限可能
想要學習如何使用pyserial庫實現(xiàn)串口通信嗎?這篇指南將帶你一步步了解Python中的串口通信,無論是控制硬件設備還是與外部設備進行數(shù)據(jù)交換,pyserial庫都能為你提供便捷的解決方案,快來跟著我們的指南,輕松掌握串口通信的技巧吧!2023-11-11
python驗證公網(wǎng)ip與內(nèi)網(wǎng)ip的實現(xiàn)示例
本文主要介紹了python驗證公網(wǎng)ip與內(nèi)網(wǎng)ip的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07
Python urlencode和unquote函數(shù)使用實例解析
這篇文章主要介紹了Python urlencode和unquote函數(shù)使用實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03

