页面驱动(Page Object Model)

页面对象(Page Object)

属性:所有在该页面的测试操作中所会用到的元素对象。比如在登录测试操作中,我们会用到用户名、密码、验证码以及登录按钮这几个页面元素,所以这几个页面元素就是登录页面这个页面对象的属性

方法:所有在该页面能执行的跟测试相关的操作,我们会封装为该页面对象的方法

使用页面对象主要目的是代码复用

测试场景:

登录:有效登录、无效登录

会员管理:需要先登录再来操作会员管理的测试

如果使用传统的测试代码编写方法(不使用PO模型)会导致两个问题:

1.代码量大,无法复用代码,代码编写效率很低

2.代码维护困难,一旦元素属性发生修改,所有涉及该元素的代码都需要改

base_page.py

class BasePage:def __init__(self,driver):self.driver = driverdef find_element(self,*loc):#loc=(id,username)return self.driver.find_element(*loc)def find_elements(self,*loc):return  self.driver.find_elements(*loc)'''如果有其他的基本操作,可以继续封装'''

login_page.py

from pages.base_page import  BasePage
from selenium.common.exceptions import NoSuchElementExceptionclass LoginPage(BasePage):  #定义登录页面对象的属性和方法username=('id','username')password=('id','password')login_btn=('xpath','//input[contains(@onclick,"Login()")]')msg=('id','loginName')def login_action(self,un,pw):self.find_element(*self.username).send_keys(un)self.find_element(*self.password).send_keys(pw)self.find_element(*self.login_btn).click()def check_login_status(self):try:message=self.find_element(*self.msg).textexcept NoSuchElementException:print("============login failed================")return Falseelse:if 'admin' in message:print("============文本验证成功================")return  Trueelse:print("============文本验证失败================")return False

Myunit.py

import unittest
from selenium import  webdriverclass Myunit(unittest.TestCase):def setUp(self) -> None:self.driver=webdriver.Chrome()self.driver.get('http://localhost:8080/mms')def tearDown(self) -> None:self.driver.quit()

test_login.py

from common.myunit import Myunit
from pages.login_page import LoginPageclass LoginTest(Myunit):def test_login_success(self):lp=LoginPage(self.driver)lp.login_action('admin','admin123')self.assertTrue(lp.check_login_status())def test_login_failed(self):lp=LoginPage(self.driver)lp.login_action('','admin123')self.assertFalse(lp.check_login_status())

mms.py

import  unittest
import time
from selenium import  webdriver
class MMS(unittest.TestCase):def setUp(self) -> None:self.driver=webdriver.Chrome()self.driver.get('http://localhost:8080/mms')def tearDown(self) -> None:self.driver.quit()def test_login_success(self):self.driver.find_element('id', 'username').send_keys('admin')self.driver.find_element('id', 'password').send_keys('admin123')self.driver.find_element('xpath','//input[contains(@onclick,"Login()")]').click()time.sleep(2)result=self.driver.find_element('id','loginName').textself.assertTrue('admin' in result)def test_login_failed(self):self.driver.find_element('id', 'username').send_keys('')self.driver.find_element('id', 'password').send_keys('admin123')self.driver.find_element('xpath', '//input[contains(@onclick,"Login()")]').click()

mms_page.py

import timefrom pages.base_page import BasePageclass MMSPage(BasePage):phone=("id","customerphone")name=("id","customername")add_btn=("xpath","//button[@onclick='addCustomer()']")search_btn=("xpath","//button[contains(@onclick,'searchCustomer')]")result_list=("xpath","//tbody[@id='customerlist']/tr")member_manage_link=('link text','会员管理')def goto_member_manage(self):self.find_element(*self.member_manage_link).click()def add_action(self,phone,name):  #新增会员操作self.find_element(*self.phone).send_keys(phone)self.find_element(*self.name).clear()self.find_element(*self.name).send_keys(name)self.find_element(*self.add_btn).click()def check_add_action(self,phone):self.find_element(*self.phone).clear()self.find_element(*self.phone).send_keys(phone)time.sleep(1)self.find_element(*self.add_btn).click()time.sleep(1)results=self.find_elements(*self.result_list)if results>1:return  Trueelse:return  False

test_member.py

from common.myunit import Myunit
from  pages.mms_page import MMSPage
from pages.login_page import LoginPage
class Member(Myunit):def test_add_member_success(self):lg=LoginPage(self.driver)lg.login_action('admin','admin123','0000')mms=MMSPage(self.driver)mms.goto_member_manage()mms.add_btn('13277777777','tester2')self.assertTrue(mms.check_add_action('13277777777'))

页面驱动page object model相关推荐

  1. Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)

    Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python) 研究Selenium + python 自动化测试有近两个月了,不能说 ...

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

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

  3. Python+Selenium自动化测试:Page Object模式

    Page Objects是selenium的一种测试设计模式,主要将每个页面看作是一个class.class的内容主要包括属性和方法,属性不难理解,就是这个页面中的元素对象,比如输入用户名的输入框,输 ...

  4. 页面驱动开发(Page Driven) —— 一种大多数人还不认同的技术

    ---------- 前言 ---------- 极限编程为什么不极限?我们已经按照教科书.Jcobson.MatinFowler的做了,用了测试驱动,用了小卡片,用了standmeeting,可是结 ...

  5. 【转载】Selenium使用Page Object实现页面自动测试

    点击这里查看原文 ======================================= Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Clas ...

  6. Page Object设计模式实践

    Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,通过对界面元素的封装减少冗余代码,同时在后期维护中,若元素定位发生变化,只需要调整页面元素封装的代码,提高测试用例的可 ...

  7. python+ seleniumAPPium自动化 page Object 设计模式

    题记: 之前公司项目比较稳定, 在进行了系统测试,想用自动化测试进行冒烟测试,或者对主要功能进行测试, 因此用到了PO模式 因此做个记录: Page Object Page Object模式是使用Se ...

  8. MOSS 2010:Visual Studio 2010开发体验(19)——ECMAScript Object Model

    这篇文章部分材料摘自下面这个地址,我做了翻译,并且按照我的案例场景做了补充 http://www.codeproject.com/Articles/60348/SharePoint-2010-Clie ...

  9. 关于page object(PO)模型的介绍

    所谓的PO就是page object,通俗解释一下就是每个页面当成一个对象,给这些页面写一个类,主要就是完成元素定位和业务操作:至于测试脚本要和ta区别开来,需要什么去这些页面类去调用即可.这样的好处 ...

最新文章

  1. Bzoj1002 [FJOI2007]轮状病毒
  2. python游戏最简单代码-如何利用Python开发一个简单的猜数字游戏
  3. vue实现查询多条记录_sql:多表查询
  4. 【Linux】一步一步学Linux——sort命令(53)
  5. Java最佳实践–高性能序列化
  6. stl之multimap容器
  7. 4一20ma电流有源与无源区别_一文读懂有源信号、无源信号、干接点、湿接点
  8. linux系统上查询ip地址归属
  9. android逆向工程dex2jar使用
  10. I2C详解(2) I2C总线的规范以及用户手册(1) I2C 总线协议
  11. erp软件涉及哪些计算机技术?,ERP软件应该学习哪些内容?
  12. USB 大容量存储设备的开发
  13. goahead(嵌入式Web服务器)之asp、goform篇
  14. matlab 元素 最大值和最小值,[转载]matlab中的最大值和最小值
  15. 几种镜像恒流源电路分析!
  16. java POI导出excel,导出的excel,打开文件提示文件格式或扩展名无效
  17. win7开不了机按f8修复计算机没反应,win7开不了机按f8没用怎么办
  18. 压缩软件大比拼历史回顾:ZIP与RAR
  19. 微信开发者.js.json_非中国开发者如何利用微信的1.1B每月活跃用户
  20. kali linux怎么远程桌面,适用于kali linux的远程桌面开启方法(从windows xp 远程登录到kali linux )...

热门文章

  1. Transformer及其变种
  2. 鲁中职业学院计算机平面设计,鲁中职业学院17名学生春季高考免试直升本科
  3. 【数据聚类|深度聚类】Contrastive Clustering(CC)论文研读
  4. 非科班出身,工作 10 年,我从 2800 到如今年薪 200 万
  5. 16:9显示器与4:3显示器的显示高度关系 -- 0.82
  6. 高级定时器TIM1TIM8工作原理和功能
  7. 【问】结算时报错,提示“传递给系统调用的数据区域太小”,如何解决?
  8. imx6ull_SPI
  9. 园区动态 || 热烈欢迎金牛区五块石街道党群办一行莅临园区考察交流
  10. noj1042 -电子老鼠闯迷宫