PageObject快速入门

介绍:

Page Object是selenium的一种设计模式, 是在web自动化测试中将一个页面设备成一个class或基础库来实际的方法
这种模式的好处有以下几点:
1、让代码可以在不同的测试case或场景中可以重用
2、减少重复代码的数量
3、当测试界面发生改变时,只需要优化对应class或库即可

示意图如下:

首先,我们要做的第一件事就是区分页面本身和页面上的元素。

其次,就是要进行对自动化用例的设计,分析我们需要测试验证哪些功能点

实例操作:

根据Selenimu Python API中PageObject的实例我们实际操作一下

很简单的一个实例,打开www.python.org网站然后进行搜索关键字,如下图所示

测试点分析:

分析一下测试点,主要有两个动作:

1、打开www.python.org网站,确定是否打开

2、如果打开后就进行关键字搜索

编码:

根据PageOjbect模式,在eclipse中建立下面的对像文件

相关代码如下:

页面元素

element.py:

#coding:utf-8
'''
Created on 2015-11-13
@author: Administrator
'''
from selenium.webdriver.support.ui import WebDriverWait class BasePageElement(object): def __set__(self,obj,value): driver=obj.driver
WebDriverWait(driver,100).until(lambda driver: driver.find_element_by_name(self.locator()))
driver.find_element_by_name(self.locator).send_keys(value) def __get__(self,obj,owner): driver=obj.driver
WebDriverWait(driver,100).until(lambda driver : driver.find_element_by_name(self.locator()))
element=driver.find_element_by_name(self.locator)
return element.get_attribute('value')

page.py

#coding:utf-8
'''
Created on 2015-11-13
@author: Administrator
'''
from element import BasePageElement
from locators import MainPageLocators class SearchTextElement(BasePageElement): locator='q' class BasePage(object): def __init__(self,driver):
self.driver=driver class MainPage(BasePage): search_text_element=SearchTextElement() def is_title_matchs(self): return 'Python' in self.driver.title def click_go_button(self): element=self.driver.find_element(*MainPageLocators.GO_BUTTON)
element.click() class SearchResultsPage(BasePage): def is_result_foun(self): return "No results found." not in self.driver.page_source

locators.py

#coding:utf-8
'''
Created on 2015-11-13
@author: Administrator
'''
from selenium.webdriver.common.by import By class MainPageLocators(object): GO_BUTTON=(By.ID,'submit') class SearchResultsPageLocators(object): pass

最后就是测试用例

testcase.py

这里用的chrome

#coding:utf-8
'''
Created on 2015-11-13
@author: Administrator
''' import unittest
from selenium import webdriver
import page class PythonOrgSearch(unittest.TestCase): def setUp(self):
chrome_driver_path=r'C:\\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'
self.driver=webdriver.Chrome(chrome_driver_path)
self.driver.get('http://www.python.org') def test_search_in_python_org(self): main_page=page.MainPage(self.driver)
assert main_page.is_title_matchs(), "python.org title doesn't match."
main_page.search_text_element='pycon'
main_page.click_go_button()
search_result_page=page.SearchResultsPage(self.driver) assert search_result_page.is_result_foun(), "No result found" def tearDown(self):
self.driver.close() if __name__=="__main__":
unittest.main()

从这里可以看出,如果UI界面改动了,只需要更改page里的相关接口,不需要再次更改用例脚步。

E-mail:362299908@qq.com

自动化测试---PageObjects快速入门(一)的更多相关文章

  1. 【转】Flask快速入门

    迫不及待要开始了吗?本页提供了一个很好的 Flask 介绍,并假定你已经安装好了 Flask.如果没有,请跳转到 安装 章节. 一个最小的应用 一个最小的 Flask 应用看起来会是这样: from ...

  2. 【转】Robot Framework 快速入门

    目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变 ...

  3. CI Weekly #21 | iOS 持续集成快速入门指南

    搭建 iOS 持续集成环境要多久?每个 iOSer 都有不同的答案.这次我们整理了 flow.ci 的 iOS 持续集成的相关文档和最佳实践,希望帮你更快地完成构建.更新文档见: flow.ci iO ...

  4. Docker三十分钟快速入门(下)

    一.背景 上篇文章我们进行了Docker的快速入门,基本命令的讲解,以及简单的实战,那么本篇我们就来实战一个真实的项目,看看怎么在产线上来通过容器技术来运行我们的项目,来达到学会容器间通信以及dock ...

  5. 笔记:Spring Cloud Zuul 快速入门

    Spring Cloud Zuul 实现了路由规则与实例的维护问题,通过 Spring Cloud Eureka 进行整合,将自身注册为 Eureka 服务治理下的应用,同时从 Eureka 中获取了 ...

  6. Postman 快速入门之脚本

    1.学习中心,官方文档 https://learning.getpostman.com/docs/postman/scripts/test_scripts/ 2.基于Postman的API自动化测试 ...

  7. 【待考察】Appium使用技巧,助你快速入门移动端自动化!

    Appium使用技巧,助你快速入门移动端自动化! 原创: 柠檬班superman 柠檬班软件测试 1月4日 关注并置顶[柠檬班]的小哥哥小姐姐 “猪”年行大运 说说最近研究移动端的自动化 移动端的自动 ...

  8. Spring Cloud Zuul 快速入门

    Spring Cloud Zuul 实现了路由规则与实例的维护问题,通过 Spring Cloud Eureka 进行整合,将自身注册为 Eureka 服务治理下的应用,同时从 Eureka 中获取了 ...

  9. 移动端自动化测试Appium 从入门到项目实战Python版☝☝☝

    移动端自动化测试Appium 从入门到项目实战Python版 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌)  说到APP自动化测试,Appium可是说是非常流 ...

随机推荐

  1. 基于Struts2.3.x+Spring3.2.x+Hibernate4.2.x+EasyUI1.3.4+Maven架构的示例程序

    基于Struts2.3.x+Spring3.2.x+Hibernate4.2.x+EasyUI1.3.4+Maven架构的示例程序 不知道为什么,保存的时候显示有一个连接为违禁内容,可能是…………. ...

  2. 我们要注意的Mysql基本安全设置

    1.设置或修改Mysql root密码:默认安装后空密码,以mysqladmin命令设置密码: mysqladmin -uroot password "password" Mysq ...

  3. redis live 如何安装

    在 windows 环境下安装 redislive   这是一篇在 windows 环境下安装 redislive 的教程! 项目地址:https://github.com/nkrode/RedisL ...

  4. JS下拉图片Demo3

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. Qt 事件处理的五个层次

    看了这篇文章(见http://devbean.blog.51cto.com/448512/231861),然后经过自己的思考,把Qt事件处理的五个层次.同时也是Qt时间处理的流程画了出来.若有不对请批 ...

  6. 关于Cocos2d-x中精灵节点的透明度的设置

    1.当我们需要某个精灵作为一个大一点的容器来存放其他的小精灵的时候,我们先设置这个精灵的大小 setTextureRect(Rect(0, 0, babySize.width, babySize.he ...

  7. Cocos2d-x模版卸载及安装

    卸载:将隐藏的模板文件删除掉 首先打开你mac终端,然后输入如下命令:显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -b ...

  8. Struts2中jsp前台传值到action后台的三种方式以及valueStack的使用

    struts2中的Action接收表单传递过来的参数有3种方法: 如,登陆表单login.jsp: <form action="login" method="pos ...

  9. e659. 缩放,剪取,移动,翻转图形

    AffineTransform tx = new AffineTransform(); tx.scale(scalex, scaley); tx.shear(shiftx, shifty); tx.t ...

  10. eclipse安装spring tool suite插件

    在实际项目开发时,如果我们创建了一个spring文件,其实也就是个xml文件,如果没有集成spring的开发工具,创建的就是一个单纯的xml文件.安装spring插件以后创建spring配置文件会方便 ...