Selenium自动化测试——计算器加法测试
项目简介:对“在线计算器”的加法功能进行自动化测试
使用技术:PO框架+Unittest+Selenium
项目框架:
以下针对代码结构及功能作相应分析:
1、base基类层
base_cal_test.py包含page页面一些公用的方法,比如说查找定位计算器元素,点击功能等;
get_driver.py 获取driver对象
- 注意解包loc只需要在查找元素的地方使用就可以
包含
#初始化方法
#查找元素方法
#点击元素方法
#获取value属性方法封装
#截图方法
源代码:base_cal_test.py
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import timeclass Base:# 初始化方法def __init__(self,driver):self.driver = driver# 查找元素def base_find_element(self,loc,timeout=30,poll=0.5):"""@param loc: 元素的定位信息,元组格式@param timeout: 默认超时时间30秒@param poll: 访问频率,0.5秒一次@return: 返回查找到的元素"""return WebDriverWait(self.driver,timeout=timeout,poll_frequency=poll).until(lambda x:x.find_element(*loc))# 点击元素def base_click(self,loc):self.base_find_element(loc).click()# 获取元素的value值def base_get_ele_value(self,loc):#使用get_attribute("value")获取指定元素的属性值return self.base_find_element(loc).get_attribute("value")# 截图def base_get_image(self):self.driver.get_screenshot_as_file('../image/{}.png'.format(time.strftime("%Y_%m_%d %H:%M:%S")))
get_driver.py
from selenium import webdriver
from PO.练习计算器 import pageclass GetDriver:#设置driverdriver = None# 获取driver@classmethoddef get_driver(cls):if cls.driver is None:#实例化浏览器cls.driver = webdriver.Chrome()#最大化cls.driver.maximize_window()#打开浏览器cls.driver.get(page.url)return cls.driver#单例原则# 关闭driver@classmethoddef quit_driver(cls):if cls.driver:print('关闭之前',cls.driver)cls.driver.quit()print('关闭之后', cls.driver)cls.driver = Noneprint('关闭之后', cls.driver)#注意此处有很大的坑,必须在关闭之后要置空if __name__ == '__main__':#第一次获取浏览器print(GetDriver().get_driver())# 第二次获取浏览器print(GetDriver().get_driver())GetDriver.quit_driver()
2、page(页面对象):一个页面封装成一个对象,继承base,
模块名:page+实际操作模块名称;
类名:大驼峰命名:PageLogin
方法名:每个元素操作单独封装成一个方法
__init__.py:包含服务器配置url和计算器元素的定位方式
'''以下为计算器数据的配置数据'''
from selenium.webdriver.common.by import By'''以下为服务器域名配置地址'''url = "http://cal.apple886.com/"#数字键#加号
clac_add = By.ID, "simpleAdd"
#减号
clac_sub = By.ID, "simpleSubtr"
#乘号:
clac_multi = By.ID, "simpleMulti"
#除号
clac_divi = By.ID, "simpleDivi"
#等号
clac_equal = By.ID, "simpleEqual"
#清空
clac_clear = By.ID, "simpleClearAllBtn"
#获取结果
clac_result = By.ID, "simpleIpt"
page_cal_test.py
from selenium.webdriver.common.by import By
from PO.练习计算器 import page
from PO.练习计算器.base.base_cal_test import Baseclass PageCalc(Base):# 输入数字方法def page_input_num(self,num):for i in str(num):#拆开单个按键定位方式loc = By.ID, "simple{}".format(i)self.base_click(loc)# 点击+操作符def page_click_add(self):self.base_click(page.clac_add)# 点击"等号"计算出结果def page_click_eq(self):self.base_click(page.clac_equal)# 获取结果def page_get_result(self):return self.base_get_ele_value(page.clac_result)# 点击清屏def page_clear(self):self.base_click(page.clac_clear)# 截图def page_get_image(self):self.base_get_image()#组装加法业务方法def page_calc(self,num1,num2):self.page_input_num(num1)self.page_click_add()self.page_input_num(num2)self.page_click_eq()
3、scripts/cases(业务层)
导包调用page,使用unittest框架调用page页面对象层完成业务流程测试需求
模块名:test+实际操作模块名称
测试业务名称:大驼峰命名,把模块名抄写一下
test_calc.py
import json
import unittest
from parameterized import parameterizedfrom PO.练习计算器.page.page_cal_test import PageCalc
from PO.练习计算器.base.get_driver import GetDriver
from PO.练习计算器.scripts.tools.read_json import read_jsondef get_data():datas = read_json("calc.json")data = []for info in datas.values():data.append((info.get('num1'), info.get('num2'), info.get('except')))return dataclass Test_calc(unittest.TestCase):@classmethoddef setUpClass(cls):#获取drivercls.driver = GetDriver.get_driver()cls.calc = PageCalc(cls.driver)@classmethoddef tearDownClass(cls):#关闭driverGetDriver.quit_driver()#测试加法方法@parameterized.expand(get_data())def test_add_calc(self,num1,num2,expect):#调用业务方法#进行计算self.calc.page_calc(num1,num2)try:#断言self.calc.assertEqual(self.calc.page_get_result(),expect)except:#截图self.calc.page_get_image()
在scripts/tools文件夹里添加对数据读取的封装函数
read_json.py
import jsondef read_json(filename):with open('../data/'+ filename,'r' , encoding='utf-8') as f:return json.load(f)if __name__ == '__main__':datas = read_json("calc.json")print(datas)
这里的read_json函数返回的是读取测试用例数据,格式如下,所以需要在test_calc.py文件中有对应的改造,需要的格式是:[( ),( ),( )]
在该项目中需要注意:
1、在需要定位网页元素的时候需要用到loc的时候,只用在查找元素那块使用*进行解码
2、注意:在关闭driver对象的语句之后一定要将driver重置为None
3、深刻体会封装的含义
Selenium自动化测试——计算器加法测试相关推荐
- selenium自动化测试_您如何使用Selenium来计算自动化测试的投资回报率?
selenium自动化测试 跨浏览器测试是一种测试,需要大量的精力和时间. 通过不同的浏览器,操作系统,设备,屏幕分辨率测试Web应用程序,以评估针对各种受众的Web内容呈现的过程是一项活动. 特别是 ...
- python写界面输入测试脚本_python+Selenium自动化测试——输入,点击操作
这是我的第一个真正意思上的自动化脚本. 1.练习的测试用例为: 打开百度首页,搜索"胡歌",然后检索列表,有无"胡歌的新浪微博"这个链接 2.在写脚本之前,需要 ...
- python测试脚本项目全程教程_《手把手教你》系列练习篇之5-python+ selenium自动化测试(详细教程)...
1. 简介 今天我们继续前边的练习,学习和练习一下:如何使用webdriver方法获取操作复选框-CheckBox.测试不同的分辨率.如何断言title.如何获取某一个元素的text属性值等等,这些小 ...
- selenium自动化测试_维持Selenium测试自动化的完美方法
selenium自动化测试 毫无疑问, 自动浏览器测试已改变了软件开发的工作方式. 如果不是Selenium,我们将无法像我们一样使用各种各样的无错误的Web应用程序. 但是有时,甚至IT部门也误解了 ...
- selenium自动化测试_Selenium测试可实现有效的测试自动化
selenium自动化测试 尽管移动应用程序的市场份额有大幅增长,但网络应用程序仍然具有大量的用户基础. 在部署之前,企业正在关注Web应用程序的质量. 这是测试发挥重要作用的地方. 与某些可以自动化 ...
- 测试小白基于java的selenium自动化测试环境搭建
本人是一个软件测试小白,自己在研究自动化测试时,真的入了不少坑,直到现在,才勉强将环境搭建了起来. 在此,我随随便便总结了一下基于java的selenium自动化测试环境搭建,送给正在学习软件测试的你 ...
- python写界面输入测试脚本,python+Selenium自动化测试——输入,点击操作
这是我的第一个真正意思上的自动化脚本. 1.练习的测试用例为: 打开百度首页,搜索"胡歌",然后检索列表,有无"胡歌的新浪微博"这个链接 2.在写脚本之前,需要 ...
- Selenium自动化测试的【投资回报率】还能这样计算
目录:导读 前言 使用Selenium评估测试自动化的ROI的指标 Selenium测试自动化的范围 您将节省多少时间? 您的资源带宽 资源和工具的投资预算 总缺陷数 缺陷质量 在测 ...
- 《Selenium自动化测试指南》—第1章1.1节自动化测试基础
本节书摘来自异步社区<Selenium自动化测试指南>一书中的第1章1.1节自动化测试基础,作者赵卓,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.1 自动 ...
- 自从掌握了Selenium自动化测试框架设计,我在公司都横着走!
测试工作对技术的要求不低,测试工程师更是高技能职位.但有很多新入行的伙伴认为,测试工作就是钟"点"工,用鼠标在软件点里点~点~点~就能做测试.这种思维是很可怕的,这会对测试人的职业 ...
最新文章
- 倒计时一天 坚果智能影院让家用投影投出你的新生活主义
- stm32 GPIO的8种工作模式
- TextView中文字实现跑马灯
- html如何与py_Web项目如何做单元测试?
- ResNext(2017)解读
- 使用 AngularJS 和 ReactJS 的经验
- 关于css浮动的一点思考
- NOIP2018没有什么新闻
- Python线程指南 ---转自 http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html
- fcntl函数之文件锁 F_SETLK
- python和pytorch关系_pytorch 模拟关系拟合——回归实例
- python数据分析:Matplotlib
- 【时间序列分析】03.正态时间序列与严平稳序列
- 【洋哥聊运营】5点讲透增长
- Windows 关闭错误报告/弹窗
- 电信物联网平台,java后台对接电信北向应用,订阅平台消息
- 锐龙7 7840U参数 r7 7840U性能怎么样 r77840U相当于什么水平
- HTML实现可编辑下拉框
- Dlib模型实现人脸识别
- ChimeraX cryoEM 可视化教程:细菌ATP合酶
热门文章
- Proteus8.6 安装教程
- 北风网android,北风网JAVA/ASP.NET/Android系列公开课视频教程入门项目必学课程
- 迈入python游戏编程的大门,超详细的python环境搭建教程
- vscode实现右键文件夹选择open with code
- 深入浅出数据分析 - 数据分析引言
- 【C语言】C语言从入门到精通 | 第3章 数据类型(一)— 自学笔记
- 数据挖掘算法原理与实践:k-均值
- 分享 MSDN 下载工具(Word/PDF)
- 自己创建DXperience的本地资源文件
- 计算机科学导论5版答案,5计算机科学导论习题答案.doc