poium测试库前身为selenium-page-objects测试库,好像是‘虫师’做的一个项目,它的核心是基于Page Objects实现元素定位的封装。其原理还是page-object的思想,也就是元素定位和操作分层。在遇到开发修改了页面元素,原有的自动化定位失效来说,这种思想的运用很好的解决了这一问题。
poium的优势
Page Objects设计模式大家都懂,这是以前对对Page层的封装。
class BasePage():
def __init__(self, driver):
self.dr =driver
def by_id(self, elem):
returnself.dr.find_element_by_id(elem)
class BaiduIndexPage(BasePage):
# 搜索框
@property
def search_input(self):
return self.by_id("kw")
# 搜索按钮
@property
def search_button(self):
return self.by_id("su")
大体上是每个操作元素封装为一个方法,这样并没什么不好的,只是不够简洁。而poium可以极大的简化元素的定义,甚至接近,配置文件。
from poium import Page, Element
class BaiduIndexPage(Page):
search_input= Element(css="#kw", describe="搜索框")
search_button= Element(css="#su", describe="搜索按钮")
几百个元素的也只不过几百行代码,使用也远比配置文件简单。将元素写到配置文件里,你还要考虑如何读取。
不管是前一种page层封装,还是使用poium封装在测试用例中的使用并无太大的差别。
from selenium import webdriver
import unittest
defbaiduTest(unittest.TestCase):
defsetUp(self):
self.driver =webdriver.Chrome()
self.base_url ="https://www.baidu.com"
def tearDown(self):
self.driver.quit()
def test_search(self):
page= BaiduIndexPage(driver)
page.get(self.base_url)
page.search_input.send_keys("poium")
page.search_button.click()
# .....