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

2021-09-05 06:12:33 字數 3849 閱讀 7726

物件導向的特性:封裝、繼承、多型。在自動化中一樣適用,selenium自動化測試中有乙個名字常常被提及pageobject(思想與物件導向的特性相同),通過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指令碼的分析,可以提取到:

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 import webdriver

# from time import sleep

## driver = webdriver.firefox()

# driver.get("")

## driver.find_element_by_xpath("//input[@id='kw']").send_keys("bela") #輸入框

## sleep(3)

# driver.quit()

# 優化後的測試場景

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):

# 定位元素

po設計模式中的basepage基類對應案例中的basepage.py檔案。

po模式中的page1或pagen對應案例中的search.py

po設計模式中testcase對應案例中的testcase.py

推廣下我的部落格專欄,目前選定了乙個主題《從零學selenium自動化測試框架》,讓我們從**擼起,一步步實現web自動化測試框架

該專題會從零帶你搭建乙個可用的自動化測試框架(基於python+selenium)

前提:你要掌握了python與selenium基礎哦。要不你看不懂的。

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模式可以大大提高測試用例的維護效率。傳統測試指令碼的弊端 測試指令碼分離,維護成本高 可擴充套件性差 復用性低等 pageobject設計模式...