PageObject模式及pytest+pytest-selenium实际操作

概念

PageObject 见名思意,就是页面对象。说白就是把页面元素定位和页面元素操作分开。
PageObject在实战过程中我们会对脚本实现进行分层。通常做法是分三层:

  • 对象库层
  • 逻辑层
  • 业务层

百度页面封装

  • 列出需要操作的元素
  • 对每个元素的操作进行封装
  • 组装成业务流
    PageObject模式及pytest+pytest-selenium实际操作_第1张图片
    对搜索业务需要操作的元素进行封装:
class BaiduPage(object):
    """百度首页对象,负责该页面所有元素的定位及操作"""
    search_ipt_loc = ('id', 'kw')  
    search_btn_loc = ('id', 'su')

    def __init__(self,driver):
        self.driver = driver

    def input_keyword(self,text):
        search_ipt = self.driver.find_element(*self.search_ipt_loc)
        search_ipt.clear()
        search_ipt.send_keys(text)

    def click_search_btn(self):
        self.driver.find_element(*self.search_btn_loc).click()

    def search(self,text):
        self.input_keyword(text)
        self.click_search_btn()

用pytest-selenium测试

def test_baidu_search03(selenium):
    selenium.get('http://www.baidu.com')
    baidu = BaiduPage(selenium)
    baidu.search('CSDN')
    time.sleep(2)
    assert 'CSDN' in selenium.title
    selenium.quit()

命令行执行:

python3 -m pytest testcases/test_baidu.py::test_baidu_search03 --driver=chrome

在这里插入图片描述

总结

总得来看:

  1. case越多使用PO模式会使你的代码结构更清晰
  2. 元素复用越多PO模式下维护非常容易
  3. 逻辑复用越多PO模式下维护非常容易 (如果逻辑复用多,需要多考虑逻辑层的颗粒度)
  4. 元素/逻辑/数据复用越多应选择更多层的PO模式

当然这里只是三层,还有一些其他分层比如:


两层:

  • 对象逻辑层
  • 业务数据层

四层:

  • 对象库层
  • 逻辑层
  • 业务层
  • 数据层

挖个坑,从PO模式我们已经可以大概知道了一个自动化脚本所具有的元素,但是页面元素和脚本全部都在一起,看起来非常不美观,等有时间再写一篇怎么样利用pytest搭建一个简单的测试框架去管理我们的数据以及用例~

你可能感兴趣的:(selenium+Python,Pytest)