【python+selenium-03】UI自动化测试的PageObjectModule驱动
接上一篇,我们提到了关键字驱动,并且体会了它的好处。
本文讲到另外一种驱动--PageObjectModule即POM驱动,也就是"页面驱动"。
页面驱动,实际上是对selenium提供的基本方法进行二次封装,以达到简化调用的目的。
大概是从代码片段A:
from selenium import webdriver from time import sleep driver = webdriver.Firefox() driver.implicitly_wait(30) driver.get("http://www.baidu.com") driver.find_element_by_id("kw").send_keys("python") driver.find_element_by_id("su").click() sleep(3) driver.quit()
进化到了代码片段B:
from auto.tool.webui_autotest import * from time import sleep driver = WebUIInit("firefox", "http://www.baidu.com") driver.send_keys("id", "kw", "python") driver.click("id", "su") sleep(3) driver.quit()
而POM驱动,则是以具体的每个页面为单元,大致分为三个层级:
第一层:基础层
from time import sleep # PO模式的第1层,定义页面的基础类,所有页面都要继承该类 class BasePage(object): def __init__(self, driver, url): self.driver = driver self.url = url def open(self): self.driver.get(self.url) def locator_element(self, *locator): ele = self.driver.find_element(*locator) return ele def quit(self): sleep(2) self.driver.quit()
第二层:页面层
from auto.Base.base_page import * from selenium.webdriver.common.by import By from selenium import webdriver # PO模式的第2层:页面层(主要是页面元素的定位方式及定位,以及针对不同元素的不同操作) class SearchPage(BasePage): input_id = (By.ID, "kw") click_id = (By.ID, "su") # 定位搜索内容的填入 def input_text(self, text): self.locator_element(*self.input_id).send_keys(text) # 定位百度一下按钮,点击一下 def click_element(self): self.locator_element(*self.click_id).click()
第三层:业务层
import unittest from auto.PageObject.search import * from ddt import ddt, data # PO模式的第3层,业务层 @ddt class PageObjectUnit(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() self.driver.implicitly_wait(8) def tearDown(self): self.sp.quit() @data("http://www.baidu.com") def test_01(self, url): self.sp = SearchPage(self.driver, url) self.sp.open() self.sp.input_text("python") self.sp.click_element() if __name__ == '__main__': unittest.main()
至于选择关键字驱动,还是POM驱动,还得各位小伙伴根据各自实际的需求出发,考虑以下几点,综合评估:
- 业务场景:自动化测试代码,最终一定是要大批量执行的,绝不是单独的1条或者2条,所以是基于主要流程,还是基于很复杂的很多流程,这关系到框架的选择与调整;
- 维护成本:结合单位具体的实际情况,哪些页面会经常变动,会经常变动哪些内容,如何才能更高效的完成维护;
- 未来趋势:这个未来趋势,并不是自动化框架上的趋势,而是公司未来的技术发展方向。
记住一句话,适合的才是最好的!那,什么才是"适合"的呢?
---------------------------------------------------
立足软件测试领域,并重新定义测试!
---------------------------------------------------