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中的定义: