一卵迂、po模型介紹
? ? ? ? ? ? 優(yōu)點(diǎn):重用裕便,業(yè)務(wù)和對(duì)象分離,代碼結(jié)構(gòu)清晰见咒,方便代碼維護(hù)? ? ? ? ? ?
二偿衰、核心要素
? ? ? ? ? ? 1、在PO模式中抽離封裝集成一個(gè)BasePage類(lèi)改览,該基類(lèi)應(yīng)該擁有一個(gè)只實(shí)現(xiàn)webdriver實(shí)例的屬性
? ? ? ? ? ? 2下翎、每一個(gè)page都繼承BasePage,通過(guò)driver來(lái)管理本page中元素宝当,將page中的操作封裝成一個(gè)個(gè)方法
? ? ? ? ? ? 3视事、TestCase繼承unittest.Testcase類(lèi),并依賴(lài)page類(lèi)庆揩,從而實(shí)現(xiàn)相應(yīng)的測(cè)試步驟
三俐东、po實(shí)現(xiàn)
? ? ? ? ? ? 1、進(jìn)入網(wǎng)址
? ? ? ? ? ? defget(self):
? ? ? ? ? ? ? ? ? ? self.driver.get(self.base_url)
? ? ? ? ? ? 2订晌、元素定位,替代八大定位
? ? ? ? ? ? defget_element(self,*locator):
? ? ? ? ? ? ? ? ? ? returnself.driver.find_element(*locator)
? ? ? ? ? ? 3虏辫、點(diǎn)擊
? ? ? ? defleft_click(self,*locator):
? ? ? ? ? ? ? ? ActionChains(self.driver).click(self.get_element(*locator)).perform()
? ? ? ? ? ? 4、輸入
? ? ? ? defsend_text(self,text,*locator):
? ? ? ? ? ? ? ? self.driver.find_element(*locator).send_keys(text)
? ? ? ? ? ? 5锈拨、清除
? ? ? ? ? ? defclear_text(self,*locator):
? ? ? ? ? ? ? ? ? ? self.driver.find_element(*locator).clear()
四砌庄、實(shí)現(xiàn)SearchPage
? ? ? ? ? ? 1、進(jìn)入百度
? ? ? ? ? ? ? ? ? ? defopen_baidu(self):
? ? ? ? ? ? ? ? ? ? ? ? ? ? self.get()?
? ? ? ? ? ? 2奕枢、輸入搜索內(nèi)容
? ? ? ? ? ? ? ? ? ? definput_search_content(self,text):
? ? ? ? ? ? ? ? ? ? ? ? ? ? self.send_text(text,By.ID,"kw")
? ? ? ? ? ? 3娄昆、點(diǎn)擊按鈕
? ? ? ? ? ? ? ? ? ? defclick_baidu_search(self):
? ? ? ? ? ? ? ? ? ? ? ? ? ? self.left_click(By.ID,"su")
五、總結(jié)
? ? ? ? ? ? ? ? 1缝彬、PO設(shè)計(jì)模式中的BasePage基類(lèi)對(duì)應(yīng)案例中的BasePage.py文件
? ? ? ? ? ? ? ? 2萌焰、PO模式中的pages中的案例顯示Search.py
? ? ? ? ? ? ? ? 3、PO模式設(shè)計(jì)中TestCase對(duì)應(yīng)案例中的TestCase.py
六谷浅、PO模式的優(yōu)點(diǎn)
? ? ? ? ? ? ? ? 1杆怕、PO提供了一種業(yè)務(wù)流程與頁(yè)面元素操作分離的模式,這使得測(cè)試代碼變得更加清晰
? ? ? ? ? ? ? ? 2壳贪、頁(yè)面對(duì)象與用例分離陵珍,使得我們更好的復(fù)用對(duì)象
? ? ? ? ? ? ? ? 3、可復(fù)用的頁(yè)面方法代碼會(huì)變得更加優(yōu)化
? ? ? ? ? ? ? ? 4违施、更加有效的命令方式使得我們更加清晰的知道方法所操作的UI元素