po模式好处

Page Object(页面对象)模式,是Selenium实战中最为流行,并且被做自动化测试所熟悉和推崇的一种设计模式之一。在设计测试时,把页面元素定位和元素操作方法按照页面抽象出来,分离成一定的对象,然后再进行组织。

Page Object是一种面向对象的设计模式,它重新定义了一些内容。如下:网页=类别;页面上的各种元素=变量;用户互动=方法。

由于测试代码和页面代码是分开的。因此,Page Object可以抵制微小的调调整,有助于我们构建更稳固的代码框架。

可靠且易于维护。

脚本是可读的,且代码是可重用的,还可以完全消除重复部分。

可以解决

  • 元素定位改变带来的维护成本的增加
  • 元素定位与用例分离
  • 代码冗余

page类函数封装

第一种

class PageBaidu:
    button = (By.ID, 'su')
    input = (By.ID, 'kw')

class TestBaidu:
    def test_baidu1(self, driver):
        page = PageBaidu()
        driver.get("https://www.baidu.com/")
        title = driver.title
        url = driver.current_url
        text = driver.find_element(*page.news).text
        button_text = driver.find_element(*page.button).accessible_name
        assert title == "百度一下,你就知道"
        assert url == "https://www.baidu.com/"
        assert text == "新闻"
        assert button_text == "百度一下"

第二种

class PageBaidu:
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get("https://www.baidu.com")
    button = (By.ID, 'su')
    input = (By.ID, 'kw')
    def search_keyword(self, keyword):
        self.driver.find_element(*self.input).send_keys(keyword)
        self.driver.find_element(*self.button).click()

class TestBaidu:
    def test_baidu3(self):
        page = PageBaidu()
        page.search_keyword("UI自动化")

page类继承

class BasePage:
    def __init__(self, driver):
        self.driver = driver
        self.driver.maximize_window()
        self.driver.implicitly_wait(10)
        self.driver.get("https://www.baidu.com")

class PageBaidu(BasePage): 
    button = (By.ID, 'su')
    input = (By.ID, 'kw')

    def search_keyword(self, keyword):
        self.driver.find_element(*self.input).send_keys(keyword)
        self.driver.find_element(*self.button).click()

class TestBaidu:
    def test_baidu1(self, driver):
        page = PageBaidu(driver)
        page.search_keyword("UI自动化")

数据驱动

class TestBaidu:
    @pytest.mark.parametrize("key", read_yaml()['skill'])
    def test_baidu1(self, driver, key):
        page = PageBaidu(driver)
        page.search_keyword(key)

find_element二次封装

作者设置了回复可见

send_keys封装

作者设置了回复可见

click封装

作者设置了回复可见

操作浏览器封装

作者设置了回复可见

切换窗口封装

作者设置了回复可见

title、url、page_source封装

作者设置了回复可见

获取文本封装

作者设置了回复可见

鼠标操作封装

作者设置了回复可见

Select封装

作者设置了回复可见

其他功能封装

作者设置了回复可见