selenium - 设计模式Page Object

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

 

posted @ 2020-04-24 15:48  小虫虫大虫虫  阅读(199)  评论(0编辑  收藏  举报