一狸演、PO模式簡單介紹
????PO模式就是將將頁面元素的定位與操作方法與各個頁面上的元素分離,提高代碼的復(fù)用率僻他,降低代碼的編寫量宵距。同時抽離業(yè)務(wù)邏輯,與數(shù)據(jù)文件吨拗,降低代碼的耦合性满哪。核心還是面向?qū)ο缶幊蹋ㄟ^子類繼承父類的特性劝篷,達(dá)到使界面代碼簡潔的目的哨鸭。
????基本頁面寫常用的元素定位與元素操作,其他頁面通過繼承基本頁面類娇妓,再添加該頁面獨特的元素定位與操作兔跌。感覺和MVC模式差不多,
二峡蟋、PO模式超簡單實例
(一)項目結(jié)構(gòu)
BaseMethod:存放一些定義的通用方法坟桅,如讀寫excel华望,csv。本篇未用
Page:BasePage放基本的元素定位與操作方法仅乓,SearchPage
TestCase:存放測試用例
TestResult:測試結(jié)果存放目錄赖舟,一般放截圖,測試結(jié)果寫入數(shù)據(jù)文件(CSV或excel)夸楣,本篇未用宾抓。
(二)BasePage
????基本頁面類豫喧,定義所有的元素的定位與操作方法石洗,瀏覽器操作紧显,按鍵操作等,獲取cookie等孵班,不用一次寫到位涉兽,用到什么了,就往里面加篙程,慢慢就成為自己的庫了枷畏。
注意:
????_init_方法不要寫錯虱饿,是雙下橫線,init不要寫錯氮发,_in根據(jù)IDE自動出來的名稱是_int袋倔,這個不是初始化的構(gòu)造方法,我踩過的坑折柠,你們就不要踩了。
class Page(object):
"""
基類批狐,PO模式的頁面都繼承這個類
"""
def __init__(self,driver,base_url):
#driver,base_url是在實例化的時候需要傳入的參數(shù)
#注意__init__這個名稱不要寫錯或者寫漏,如果這里寫漏了嚣艇,什么都看不到
self.driver=driver
self.base_url=base_url
self.timeout=30
def GetPage(self):
self.driver.get(self.base_url)
def find_element(self,*locator):
return self.driver.find_element(locator)
def input_text(self,locator_method,element,value):
self.driver.find_element(locator_method,element).send_keys(value)
def click(self,locator_method,element):
return self.driver.find_element(locator_method,element).click()
def getTitle(self):
print(self.driver.title)
return self.driver.title
def driver_quit(self):
self.driver.quit()
(三)SearchPage
????SearchPage通過繼承BasePage類再次封裝頁面元素與操作方法,相當(dāng)于將基本定位與操作方法與元素食零,輸入文本等進(jìn)行了隔離
from Page.BasePage import Page
from selenium.webdriver.common.by import By
class SearchPage(Page):
def searchBox_input(self,text):
return self.input_text(locator_method=By.ID,element='kw',value=text)
def search_btn_click(self):
self.click(locator_method=By.ID,element='su')
(四)TestCase.Case
import time
from selenium import webdriver
from Page.SearchPage import SearchPage
import unittest
class Test_search_page(unittest.TestCase):
def setUp(self) -> None:
self.driver=webdriver.Chrome()
self.base_url = 'https://www.baidu.com/'
def test_searchPage(self):
print(self.base_url)
search_page=SearchPage(self.driver,self.base_url) #實例化SearchPage頁面類,傳入初始化參數(shù)
search_page.GetPage()
search_page.searchBox_input(text='天天Python')
search_page.search_btn_click()
search_page.getTitle()
def tearDown(self) -> None:
time.sleep(5)
self.driver.quit()
if __name__ == '__main__':
unittest.main(verbosity=2)