selenium自動化測試框架之PO設計模式

2021-08-28 12:36:25 字數 3485 閱讀 8990

物件導向的特性:封裝、繼承、多型。在自動化中一樣適用,selenium自動化測試中有乙個名字常常被提及pageobject(思想與物件導向的特性相同),通過po模式可以大大提高測試用例的維護效率。

##傳統測試指令碼的弊端

測試指令碼分離,維護成本高

可擴充套件性差

復用性低等

pageobject設計模式

selenium自動化測試框架之po設計模式

po的核心要素:

在po模式中抽象封裝成乙個basepage類,該基類應該擁有乙個只實現webdriver例項的屬性。

每個乙個page都繼承basepage,通過driver來管理本page中元素,將page中的操作封裝成乙個個的方法。

testcase繼承unittest.testcase類,並且依賴page類,從而實現相應的測試步驟。

案例基礎案例

前面基礎場景選取的是baidu搜尋頁面(baidu頁面簡單,不需要搭建測試環境)baidu.py

from selenium import webdriver

from time import sleep

driver = webdriver.firefox()

driver.get(「

driver.find_element_by_xpath("//input[@id=『kw』]").send_keys(「bela」)

driver.find_element_by_xpath("//input[@id=『su』]").click()

sleep(5)

driver.quit()

將上面的指令碼放在baidu.py檔案中。

分析通過對baidu.py指令碼的分析,可以提取到:

不同的執行指令碼環境,瀏覽器不同:驅動webdriver.firefox()可以剝離,

請求位址的變化(生產環境與測試環境):url==可以剝離

實際測試場景中,可能有多個測試場景,如果每個測試場景都需要維護url、瀏覽器驅動、元素定位等,效率會非常低。

因此基於對上面的分析,是否可以設計乙個所有測試頁面(selenium本身是對b/s系統開展測試)的基類,來維護一些公共的方法。此處先定義個名字哦basepage.py,用於存放頁面公共方法及webdriver原有方法二次封裝等。

basepage.py內容如下:

from selenium.webdriver.support.wait import webdriverwait

from selenium import webdriver

from selenium.webdriver.support import expected_conditions as ec

class basepage(object):

「」"basepage封裝所有頁面都公用的方法,例如driver, find_element等

「」"# 例項化basepage類時,最先執行的就是__init__方法,該方法的入參,其實就是basepage類的入參。

# __init__方法不能有返回值,只能返回none

def __init__(self,selenium_driver,base_url):

self.driver = selenium_driver

self.base_url = base_url

# self.pagetitle = pagetitle

def on_page(self,pagetitle):

return pagetitle in self.driver.title

def _open(self,url):

self.driver.get(url)

self.driver.maximize_window()

def open(self):

self._open(self.base_url,self.pagetitle)

def find_element(self,*loc): #*loc任意數量的位置引數(帶單個星號引數)

# return self.driver.find_element(*loc)

try:

webdriverwait(self.driver,10).until(ec.visibility_of_element_located(loc))

return self.driver.find_element(*loc)

except:

print("%s 頁面未能找到 %s 元素"%(self,loc))

def script(self,src):

self.driver.excute_script(src)

def send_keys(self, loc, vaule, clear_first=true, click_first=true):

try:

loc = getattr(self, "_%s" % loc) # getattr相當於實現self.loc

if click_first:

self.find_element(*loc).click()

if clear_first:

self.find_element(*loc).clear()

self.find_element(*loc).send_keys(vaule)

except attributeerror:

print("%s 頁面中未能找到 %s 元素" % (self, loc))

測試指令碼的優化

basepage.py提取完畢,其中設計了basepage類,對一些webdriver的方法進行了二次封裝。

baidu.py基於basepage.py進行優化(充分體現po的設計思想,封裝、繼承)

from selenium.webdriver.common.by import by

from podemo.basepage import basepage #假設baidu.py、basepage.py均在podemo.basepage目錄下

from selenium import webdriver

class searchpage(basepage):

# 定位元素

baidubtn.click()

pageobject總結

selenium自動化測試框架之po設計模式

selenium 自動化測試。

第一步安裝 谷歌瀏覽器。第三步編寫測試測試指令碼 第四步 安裝selemium coding utf 8 引入webdriver和unittest所需要的包 from selenium import webdriver from selenium.webdriver.common.by import...

selenium自動化 單元測試框架

單元測試框架 在自動化中,單元測試框架是管理測試用例的,控制測試用例的執行順序和次數 unittest 前置條件 setup 一般是開啟瀏覽器操作 後置條件 teardown 一般是關閉瀏覽器 原始碼 coding utf 8 from selenium import webdriver impor...

selenium自動化測試框架之PO設計模式

物件導向的特性 封裝 繼承 多型。在自動化中一樣適用,selenium自動化測試中有乙個名字常常被提及pageobject 思想與物件導向的特性相同 通過po模式可以大大提高測試用例的維護效率。傳統測試指令碼的弊端 po的核心要素 在po模式中抽象封裝成乙個basepage類,該基類應該擁有乙個只實...