概念
PageObject 见名思意,就是页面对象。说白就是把页面元素定位和页面元素操作分开。
PageObject在实战过程中我们会对脚本实现进行分层。通常做法是分三层:
- 对象库层
- 逻辑层
- 业务层
百度页面封装
- 列出需要操作的元素
- 对每个元素的操作进行封装
- 组装成业务流
对搜索业务需要操作的元素进行封装:
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
总结
总得来看:
- case越多使用PO模式会使你的代码结构更清晰
- 元素复用越多PO模式下维护非常容易
- 逻辑复用越多PO模式下维护非常容易 (如果逻辑复用多,需要多考虑逻辑层的颗粒度)
- 元素/逻辑/数据复用越多应选择更多层的PO模式
当然这里只是三层,还有一些其他分层比如:
两层:
- 对象逻辑层
- 业务数据层
四层:
- 对象库层
- 逻辑层
- 业务层
- 数据层
挖个坑,从PO模式我们已经可以大概知道了一个自动化脚本所具有的元素,但是页面元素和脚本全部都在一起,看起来非常不美观,等有时间再写一篇怎么样利用pytest搭建一个简单的测试框架去管理我们的数据以及用例~