WebUI之PO设计模式与Unittest

一、PO模式简单介绍

    PO模式就是将将页面元素的定位与操作方法与各个页面上的元素分离,提高代码的复用率,降低代码的编写量。同时抽离业务逻辑,与数据文件,降低代码的耦合性。核心还是面向对象编程,通过子类继承父类的特性,达到使界面代码简洁的目的。

    基本页面写常用的元素定位与元素操作,其他页面通过继承基本页面类,再添加该页面独特的元素定位与操作。感觉和MVC模式差不多,

二、PO模式超简单实例

(一)项目结构

BaseMethod:存放一些定义的通用方法,如读写excel,csv。本篇未用
Page:BasePage放基本的元素定位与操作方法,SearchPage
TestCase:存放测试用例
TestResult:测试结果存放目录,一般放截图,测试结果写入数据文件(CSV或excel),本篇未用。

image.png

(二)BasePage

    基本页面类,定义所有的元素的定位与操作方法,浏览器操作,按键操作等,获取cookie等,不用一次写到位,用到什么了,就往里面加,慢慢就成为自己的库了。
注意:
    _init_方法不要写错,是双下横线,init不要写错,_in根据IDE自动出来的名称是_int,这个不是初始化的构造方法,我踩过的坑,你们就不要踩了。


class Page(object):
    """
    基类,PO模式的页面都继承这个类
    """
    def __init__(self,driver,base_url):
        #driver,base_url是在实例化的时候需要传入的参数
        #注意__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类再次封装页面元素与操作方法,相当于将基本定位与操作方法与元素,输入文本等进行了隔离

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页面类,传入初始化参数
        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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容