po模型

  • 一.PO模型介绍
  • 二.PO的核心
  • 三.非op模型实现
  • 四.op模型实现
    • 1.包含内容
    • 2.代码实现(多页面)

一.PO模型介绍

在自动化中,Selenium自动化测试中有一个名字经常被提及PageObject(思想与面向对象的特征相同),通常PO模型可以大大提高测试用例的维护效率

二.PO的核心

1.在PO模式中抽离封装集成一个BasePage类,该基类应该拥有一个只实现webdriver实例的属性
2.每一个page都继承BasePage,通过driver来管理本page中元素,将page中的操作封装成一个个方法
3.TestCase继承unittest.Testcase类,并依赖page类,从而实现相应的测试步骤

三.非op模型实现

实现内容:从火狐浏览器进入百度页面,在输入框输入123,点击百度一下,点击hao123_上网从这里开始,进入hao123界面,点击百度地图,进入百度地图界面。
代码:

// 非po模型案例:
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, reclass Baidu123(unittest.TestCase):def setUp(self):self.driver = webdriver.Firefox()self.driver.implicitly_wait(30)self.base_url = "https://www.baidu.com/"self.verificationErrors = []self.accept_next_alert = Truedef test_baidu123(self):driver = self.driverdriver.get(self.base_url + "/")  driver.find_element_by_id("kw").click() driver.find_element_by_id("kw").clear()driver.find_element_by_id("kw").send_keys("123")driver.find_element_by_id("su").click()driver.find_element_by_css_selector("h3.t > a").click()jubing = driver.window_handles[1]driver.switch_to.window(jubing)driver.find_element_by_link_text(u"百度地图").click()time.sleep(10)def is_element_present(self, how, what):try:self.driver.find_element(by=how, value=what)except NoSuchElementException as e:return Falsereturn Truedef is_alert_present(self):try:self.driver.switch_to_alert()except NoAlertPresentException as e:return Falsereturn Truedef close_alert_and_get_its_text(self):try:alert = self.driver.switch_to_alert()alert_text = alert.textif self.accept_next_alert:alert.accept()else:alert.dismiss()return alert_textfinally:self.accept_next_alert = Truedef tearDown(self):self.driver.quit()self.assertEqual([], self.verificationErrors)if __name__ == "__main__":unittest.main()

四.op模型实现

1.包含内容

PO设计模式中的BasePage基类对应案例中的BasePage.py文件
PO模式中的pages中的案例显示Search.py
PO模式设计中TestCase对应案例中的TestCase.py

2.代码实现(多页面)

实现内容:从火狐浏览器进入百度页面,在输入框输入123,点击百度一下,点击hao123_上网从这里开始,进入hao123界面,点击百度地图,进入百度地图界面。
代码:
第一部分是base基类:

// 1.base基类
from selenium.webdriver.common.action_chains import ActionChains  # 鼠标操作class BasePage():'''BasePage封装所有界面都公用的方法。例如driver,find_element等''''''实例化BasePage类时,事先执行的__init__方法,该方法需要传递参数'''def __init__(self, driver, url):self.driver = driverself.url = url# 进入网址def get(self):self.driver.get(self.url)# 元素定位,替代八大定位def get_element(self, *locator):return self.driver.find_element(*locator)# 点击def left_click(self, *locator):ActionChains(self.driver).click(self.get_element(*locator)).perform()# 输入def send_text(self, text, *locator):self.driver.find_element(*locator).send_keys(text)# 清除def clear_text(self, *locator):self.driver.find_element(*locator).clear()# 用于断言def get_title(self):return self.driver.title# 表单切换def switch_iframe(self, *locator):self.driver.switch_to.frame(self.driver.find_element(*locator))# 窗口切换def switch_window(self, n):self.driver.switch_to.window(self.driver.window_handles[n])

第二部分是页面执行内容:

// 第一个页面内容
from selenium.webdriver.common.by import Byfrom basepage.BasePage import BasePageclass SearchHao1Class(BasePage):def __init__(self, driver, url):BasePage.__init__(self, driver, url)# 打开百度def open_baidu(self):self.get()# 获取输入框传值def input_search_content(self, text):self.send_text(text, By.ID, "kw")# 点击百度一下def click_baidu_search(self):self.left_click(By.ID, "su")# 点击hao123def click_hao123(self):self.left_click(By.CSS_SELECTOR, ".t>a")
// 第二个页面内容
from selenium.webdriver.common.by import By
from basepage.BasePage import BasePageclass SearchHao2Class(BasePage):def __init__(self, driver, url):BasePage.__init__(self, driver, url)# 点击百度地图def click_baidu_ditu(self):self.left_click(By.CSS_SELECTOR, ".js_bd > li:nth-child(6) > div:nth-child(1) > a:nth-child(1)")

第三部分是unittest中的TestCase

// TestCase的py文件,进行调用执行,进行自动化测试
import unittest
from selenium import webdriver
from search.SearchPage import Searchclass BaiBu(unittest.TestCase):def setUp(self) -> None:self.driver = webdriver.Firefox()self.driver.implicitly_wait(10)def test_serach(self):url = "http://www.baidu.com"s = Search(self.driver, url)s.open_baidu()s.input_search_content("jack")s.click_baidu_search()def tearDown(self) -> None:# self.driver.quit()passif __name__ == '__main__':unittest.main()

po模型+unittest测试相关推荐

  1. Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型

    1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

  2. Python+Selenium+PO模型实现自动化测试

    一. PO模型介绍 在自动化中,Selenium自动化测试中有一个名字经常被提及PageObject(思想与面向对象的特征相 同),通常PO模型可以大大提高测试用例的维护效率 PO模型又叫PO设计模式 ...

  3. Appium+Python之PO模型(Page object Model)

    思考:我们进行自动化测试时,如果把代码都写在一个脚本中,代码的可读性会变差,且后期代码维护也麻烦,最好的想法就是测试对象和测试用例可以分离,可以很快定位问题,代码可读性高,也比较容易理解.这里推荐大家 ...

  4. Selenium基于Python web自动化测试框架 —— PO模型

    目录 1.前言: 2.PO模型的概念和理解: 3.PO模型的目录结构: 4.PO代码示例: 5.总结 6.重点:配套学习资料和视频教学 1.前言: 关于selenium测试框架首先想到的就是PO模型, ...

  5. PO模型(设计模式)

    文章目录 什么是PO模型 PO优点: PO的核心 实例 什么是PO模型 PO模型全称:Page Object(思想与面向对象的特征相同),也叫PO设计模式.他的出现主要是为了解决自动化测试中代码量增加 ...

  6. 使用po模型进行自动化测试

    编写公用的父类方法 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionC ...

  7. Python+Selenium WebUI自动化框架 -- 实现特殊PO模型

    前言: 设计执行格式,封装PO模型工厂,实现PO模型脱离代码,一套代码执行所有项目的UI自动化,让UI自动化框架脱离高成本.低效率时代,将用例的重用性贯彻到极致,让烦人的PO模型变得无所谓,让一个测试 ...

  8. 自动化测试之PO模型

    一. PO模型介绍 在自动化中,Selenium自动化测试中有一个名字经常被提及PageObject(思想与面向对象的特征相 同),通常PO模型可以大大提高测试用例的维护效率 二.PO的核心要素 1. ...

  9. Day33 PO模型

    系列文章目录 Day01 软件测试基础总结 Day02 测试用例知识点总结(上) Day03 测试用例知识点总结(下) Day04 禅道-从安装到卸载 Day05 MySql的基础使用 Day06 M ...

最新文章

  1. C语言如何获取结构体中指定元素的大小?sizeof ( (X*)0 ) -> Y)(空指针操作)
  2. springmvc数据验证
  3. 【Linux】一步一步学Linux——dpkg-deb命令(270)
  4. java 播放.pcm文件,java播发PCM文件
  5. TPLinker 联合抽取 实体链接方式+源码分析
  6. 组合赋权法之matlab
  7. 香港政府活用无人机,正式应用到调研检测领域
  8. jdk w7环境变量配置
  9. Spring mvc @RequestHeader
  10. 求抛物线和直线交点_关于抛物线大题的参考经验(5):浙江历年学考题回顾...
  11. 罗永浩回应被列老赖;三星解散自研 CPU 团队;Python 采用 12 个月的发布周期 | 极客头条...
  12. ECharts中国区域地图
  13. html页面去边框线,html中怎么去掉表格边框线的?
  14. 目标客户画像_分析目标人群画像的5个步骤
  15. 大型即时通讯系统微信、陌陌架构分析全记录!
  16. js正则表达式限定输入框内容为非负数
  17. 什么是node.js
  18. HTTP 405 错误 – 方法不被允许 (Method not allowed)【转载】
  19. windows技巧之添加右键菜单
  20. 关于程序可移植性的问题

热门文章

  1. 不要虚掷你的黄金时代,不要去倾听枯燥乏味的东西,不要设法挽留无望的失败,不要把你的生命献给无知、平庸和低俗。
  2. 水果店开业怎样宣传自己的水果店,新开水果店怎么发朋友圈宣传
  3. 【C语言】函数参数试探:传指针与传引用——以队列为例
  4. 腾讯浏览服务X5内核集成
  5. 群英服务器网站,群英网
  6. uniapp使用第三方字体
  7. 如果你爱或者恨一个人[转]
  8. web应用防火墙的部署方式
  9. Hibernate----初识
  10. 王者荣耀之我的十天(教你如何10天单排上钻石)