python+selenium Page Object 设计模式+Unittest单元测试框架
2020-01-14 16:43
405 查看
一、 Page Object 简单介绍
Page Object 是Selenium自动化测试项目开发实践的最佳设计模式之一,它主要体现在对界面交互细节的封装,这样可以使测试案例更关注于业务而非界面细节,从而提高测试案例的可读性。它的优点主要是减少代码的重复性,提高测试用例的可读性以及可维护性,特别是针对UI频繁变化的项目。
二、项目实例
接下来就以登录乐学为例来说明
1、base_page.py,这个部分主要是来定义页面基础类,定义的方法都是页面操作的基本方法。
# Author:Xueyun # -*- coding:utf-8 -*- from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC '''定义页面基础类,封装所有页面公用的方法''' class BasePage(object): # 初始化driver,url,pagetitle def __init__(self, selenium_driver, base_url, pagetitle): self.driver = selenium_driver self.base_url = base_url self.pagetitle = pagetitle # 使用title获取当前窗口title,以此来检查输入的title是否在当前title中 def on_page(self, pagetitle): return pagetitle in self.driver.title # 打开页面,并检验页面链接是否正确 '''以单下划线开头的方法,在使用import *时,该方法不会被导入,保证该方法为类私有''' def _open(self, url, pagetitle): # 打开链接 self.driver.get(url) # 窗口最大化 self.driver.maximize_window() # 校验打开的title是否与配置title一致 assert self.on_page(pagetitle), u"打开页面失败 %s" % url #调用_open方法打开链接 def open(self): self._open(self.base_url, self.pagetitle) #元素定位方法 def find_element(self, *loc): try: WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc)) return self.driver.find_element(*loc) except: print(u"%s 页面中未能找到%s元素"%(self, loc)) #send_keys方法 def send_keys(self,loc,value,clear_first=True,click_first=True): try: loc = getattr(self,'_%s'%loc) if click_first: self.find_element(*loc).click() if clear_first: self.find_element(*loc).clear() self.find_element(*loc).send_keys(value) except AttributeError: print(u"%s 页面中未能找到%s元素" % (self, loc))
2、login_page.py,创建loginpage类,继承基类方法
# Author:Xueyun # -*- coding:utf-8 -*- from selenium.webdriver.common.by import By from po.base_page import BasePage '''继承基础页面类,包含登录的所有方面''' class LoginPage(BasePage): '''定位器,通过元素属性定位元素对象''' username_loc = (By.ID,'login_username') password_loc = (By.NAME,'_password') submit_loc = (By.LINK_TEXT,'登录') span_loc = (By.CSS_SELECTOR,'#login-form > div.alert.alert-danger') #操作 #通过继承覆盖overriding方法,如果子类和父类的方法名相同,优先用子类自己的方法 #打开网页 def open(self): self._open(self.base_url, self.pagetitle) #输入用户名,调用send_keys def input_username(self,username): self.find_element(*self.username_loc).send_keys(username) #输入密码,调用send_keys def input_password(self, password): self.find_element(*self.password_loc).send_keys(password) #点击登录 def click_submit(self): self.find_element(*self.submit_loc).click() #用户名或密码不合理 def show_span(self): return self.find_element(*self.span_loc).text
3、test_case.py,测试用例的编写,利用Unitest单元测试框架来管理测试用例。
# Author:Xueyun # -*- coding:utf-8 -*- import unittest from po.login_page import LoginPage from selenium import webdriver class Case01(unittest.TestCase): ''''登录乐学''' def setUp(self): self.driver = webdriver.Chrome() self.driver.implicitly_wait(30) self.url = "http://www.5itest.cn/login" self.username = "18328379237" self.password = "123456" #用例执行体 def test_login_lexue(self): #声明登录页面类对象 login_page = LoginPage(self.driver,self.url,u"乐学") #调用打开页面组件 login_page.open() #调用用户名输入组件 login_page.input_username(self.username) #调用输入密码组件 login_page.input_password(self.password) #调用点击登录按钮组件 login_page.click_submit() def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main()
好啦,这就是简单的一个自动化测试框架,接下来我会在此基础上不断加入数据驱动测试、断言等,使自动化框架越来越趋向“成熟”,谢谢。新人一枚,若文中有任何错误,请留言,欢迎指教。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Python3-Selenium3使用PO设计模式(Page Object)实现简单的页面登录操作
- Selenium+Python :WebDriver设计模式( Page Object )
- python+selenium自动化测试-24设计模式Page Object(PO)
- Python+Selenium框架设计--- Page Object Model
- Selenium的PO模式(Page Object Model)[python版]
- Selenium的PO模式(Page Object Model)[python版]
- selenium Object Page 设计模式理解及实现!
- selenium设计模式之PageObject
- Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)
- Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)
- Selenium Page Object(PO)设计模式
- Python+Selenium框架设计篇之10-unittest执行脚本方法之discover()方法
- Python+Selenium框架设计篇之11-自动化测试报告的生成
- Python+Selenium框架设计篇之9-unittest执行脚本方法之makeSuite()
- Page Object设计模式
- Python+Selenium框架设计篇之1-什么是自动化测试框架
- Python+Selenium框架设计篇之8-unittest执行脚本方法之addTest
- Python+Selenium框架设计篇之3-什么是POM
- Python + Selenium自动化测试 -- 第一次框架设计(下)
- selenium+java+testNG+pageObject深入理解自动化测试框架