Page Object设计模式(二)——poium测试库
一、简介
poium是一个基于Selenium/appium的Page Object测试库,最大的特点是简化了Page层元素的定义。
项目地址:https://github.com/SeldomQA/poium
安装命令:pip install poium
二、基本使用
使用poium重写baidu_page.py
1 from poium import Page, PageElement 2 3 4 class BaiduPage(Page): 5 """百度Page层,百度页面封装操作到的元素""" 6 search_input = PageElement(id_="kw") 7 search_button = PageElement(id_="su")
测试用例中的使用如下:
1 from selenium import webdriver 2 import unittest 3 from time import sleep 4 from files.PO.baidu_page import BaiduPage 5 6 7 class TestBaiduSearch(unittest.TestCase): 8 9 @classmethod 10 def setUpClass(cls): 11 cls.driver = webdriver.Chrome() 12 cls.base_url = "https://www.baidu.com" 13 14 def test_baidu_search_case(self): 15 page = BaiduPage(self.driver) 16 page.get("https://www.baidu.com") 17 page.search_input("selenium") 18 page.search_button.click() 19 sleep(2) 20 self.assertEqual(page.get_title(), "selenium_百度搜索") 21 22 @classmethod 23 def tearDownClass(cls): 24 cls.driver.quit() 25 26 27 if __name__ == '__main__': 28 unittest.main(verbosity=2)
三、更多方法
1.支持的定位方法
八种定位方法:
1 from poium import Page, PageElement 2 3 4 class SomePage(Page): 5 elem_id = PageElement(id_='id') 6 elem_name = PageElement(name='name') 7 elem_class = PageElement(class_name='class') 8 elem_tag = PageElement(tag='input') 9 elem_link_text = PageElement(link_text='this_is_link') 10 elem_partial_link_text = PageElement(partial_link_text='is_link') 11 elem_xpath = PageElement(xpath='//*[@id="kk"]') 12 elem_css = PageElement(css='#id')
2.设置元素超时时间
通过timeout参数可设置元素超时时间,默认为10s。
1 from poium import PageElement, Page 2 3 4 class BaiduPage(Page): 5 search_input = PageElement(_id='kw', timeout=5) 6 search_button = PageElement(_id='su',timeout=30)
3.设置元素描述
当一个Page类中定义的元素非常多时,必须通过注释来增加可读性,这时可使用describe参数。
1 from poium import PageElement, Page 2 3 4 class LoginPage(Page): 5 """ 6 登录Page类 7 """ 8 username = PageElement(css='#loginAccount', describe="用户名") 9 password = PageElement(css='#loginPwd', describe="密码") 10 login_button = PageElement(css='login_btn', describe="登录按钮") 11 user_info = PageElement(css="a.nav_user_name > span", describe="用户信息")
需要强调的是,describe参数并无实际意义,只是增加了元素定义的可读性。
poium极大地简化了Page层的定义,除此之外,还提供了很多的API,如PageSelect类简化饿了下拉框的处理等。