Page Object是UI自动化测试项目的最佳设计模式之一。
主要特点:体现在对界面交互细节的封装上,使测试用例更专注于业务的操作,从而提高测试用例的可维护性
设计思想:把元素的定位与元素的操作分层
环境配置:pip安装(pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests poium)
使用百度首页搜索示例:
baidu_page.py
页面page文件中,仅封装元素的定位,并返回元素对象;元素的具体操作仍然在测试用例中完成
from poium import Page, PageElement # 导入poium对应的包
class BaiduPage(Page): # 创建BaiduPage类,继承Page类
# 调用PageElement类定位元素,timeout参数设置元素超时间(默认为10s),describe参数注释,增加可读性
search_input = PageElement(id_='kw', timeout=10, describe='百度输入框')
search_button = PageElement(id_='su', timeout=10, describe='百度一下按钮')
runtest.py
from selenium import webdriver
import unittest
from baidu_page import BaiduPage # 导入BaiduPage类
import time
class TestBaidu(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome()
cls.page = BaiduPage(cls.driver) # 传入浏览器驱动
cls.page.get('http://www.baidu.com') # 调用get()方法访问URL,该方法由Page类提供
def test_baidu_case1(self):
page = self.page
page.search_input.send_keys('python') # 调用BaiduPage类中定义的元素对象,实现相应的输入和点击操作
page.search_button.click()
time.sleep(2)
self.assertEqual(page.get_title, 'python_百度搜索')
@classmethod
def tearDownClass(cls):
cls.driver.quit()
if __name__ == '__main__':
unittest.main()
poium支持8种定位方式:
1 PageElement(id_='id')
2 PageElement(name='name')
3 PageElement(class_name='class_name')
4 PageElement(tag='tag')
5 PageElement(link_text='link_text')
6 PageElement(partial_link_text='partial_link_text')
7 PageElement(xpath='xpath')
8 PageElement(css='#id')
参考page_objects.py中的定义: