PO模式
学过自动化的都知道PageObjects模式,将页面对象封装为类,页面元素和操作封装为类的属性和方法,在测试方法中调用页面对象进行测试。
关于PO模式可见:http://t.csdn.cn/0DBlP
在PO模式下,我们一般定义个一个基础的BasePage类来封装一些常见的页面操作
在具体的页面继承BasePage来实现页面类
这样的写法也没有什么问题,但是在搭建框架时需要实现的内容较多。
Poium
- poium库主要实现了Base类和Element类,可以将我们的页面元素直接定义为Element类,
- 对selenium的元素操作进行了一些封装 https://github.com/SeldomQA/poium/blob/master/docs/selenium_sample.md
- 支持playwright https://github.com/SeldomQA/poium/blob/master/docs/playwright_sample.md
- 支持appium https://github.com/SeldomQA/poium/blob/master/docs/appium_sample.md
git地址:GitHub - SeldomQA/poium: Page Objects design pattern test library, support selenium、appium、playwright, etc
备注:刚发现这个库竟然是虫师写的,直呼666
pip install poium
页面类
文档:https://github.com/SeldomQA/poium/blob/master/docs/page_element.md
新建BaiduPage.py
from poium import Page, Element
class BaiduPage(Page):
search_input = Element(id_="kw")
button=Element(id_="su")
def input_text(self):
self.search_input.input("周杰伦")
def click_button(self):
self.button.click()
这里需要继承自Page类,页面元素定义为Element的实例,传入定位方法。
在元素操作里,调用的是poium封装的selenium,支持如input操作。
测试类
新建test_demo.py
from selenium import webdriver
from BaiduPage import BaiduPage
class TestDemo:
def setup(self):
self.driver=webdriver.Edge()
self.baidu=BaiduPage(self.driver)
self.baidu.open("http://www.baidu.com")
def test_search(self):
self.baidu.input_text()
self.baidu.click_button()
创建driver后,直接作为参数传给BaiduPage,使用实例baidu访问url。
源码解析
webdriver.py:这个文件主要是定义了Page页面,方法返回的是selenium的driver方法。
Settings.py:定义一些设置
selenium.py:定义BasePage和Element,并封装了一些操作方法。
U2和wda:对APP自动化的支持
common:一些工具类