项目简介:对“在线计算器”的加法功能进行自动化测试

使用技术: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自动化测试——计算器加法测试相关推荐

  1. selenium自动化测试_您如何使用Selenium来计算自动化测试的投资回报率?

    selenium自动化测试 跨浏览器测试是一种测试,需要大量的精力和时间. 通过不同的浏览器,操作系统,设备,屏幕分辨率测试Web应用程序,以评估针对各种受众的Web内容呈现的过程是一项活动. 特别是 ...

  2. python写界面输入测试脚本_python+Selenium自动化测试——输入,点击操作

    这是我的第一个真正意思上的自动化脚本. 1.练习的测试用例为: 打开百度首页,搜索"胡歌",然后检索列表,有无"胡歌的新浪微博"这个链接 2.在写脚本之前,需要 ...

  3. python测试脚本项目全程教程_《手把手教你》系列练习篇之5-python+ selenium自动化测试(详细教程)...

    1. 简介 今天我们继续前边的练习,学习和练习一下:如何使用webdriver方法获取操作复选框-CheckBox.测试不同的分辨率.如何断言title.如何获取某一个元素的text属性值等等,这些小 ...

  4. selenium自动化测试_维持Selenium测试自动化的完美方法

    selenium自动化测试 毫无疑问, 自动浏览器测试已改变了软件开发的工作方式. 如果不是Selenium,我们将无法像我们一样使用各种各样的无错误的Web应用程序. 但是有时,甚至IT部门也误解了 ...

  5. selenium自动化测试_Selenium测试可实现有效的测试自动化

    selenium自动化测试 尽管移动应用程序的市场份额有大幅增长,但网络应用程序仍然具有大量的用户基础. 在部署之前,企业正在关注Web应用程序的质量. 这是测试发挥重要作用的地方. 与某些可以自动化 ...

  6. 测试小白基于java的selenium自动化测试环境搭建

    本人是一个软件测试小白,自己在研究自动化测试时,真的入了不少坑,直到现在,才勉强将环境搭建了起来. 在此,我随随便便总结了一下基于java的selenium自动化测试环境搭建,送给正在学习软件测试的你 ...

  7. python写界面输入测试脚本,python+Selenium自动化测试——输入,点击操作

    这是我的第一个真正意思上的自动化脚本. 1.练习的测试用例为: 打开百度首页,搜索"胡歌",然后检索列表,有无"胡歌的新浪微博"这个链接 2.在写脚本之前,需要 ...

  8. Selenium自动化测试的【投资回报率】还能这样计算

             目录:导读 前言 使用Selenium评估测试自动化的ROI的指标 Selenium测试自动化的范围 您将节省多少时间? 您的资源带宽 资源和工具的投资预算 总缺陷数 缺陷质量 在测 ...

  9. 《Selenium自动化测试指南》—第1章1.1节自动化测试基础

    本节书摘来自异步社区<Selenium自动化测试指南>一书中的第1章1.1节自动化测试基础,作者赵卓,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.1 自动 ...

  10. 自从掌握了Selenium自动化测试框架设计,我在公司都横着走!

    测试工作对技术的要求不低,测试工程师更是高技能职位.但有很多新入行的伙伴认为,测试工作就是钟"点"工,用鼠标在软件点里点~点~点~就能做测试.这种思维是很可怕的,这会对测试人的职业 ...

最新文章

  1. 倒计时一天 坚果智能影院让家用投影投出你的新生活主义
  2. stm32 GPIO的8种工作模式
  3. TextView中文字实现跑马灯
  4. html如何与py_Web项目如何做单元测试?
  5. ResNext(2017)解读
  6. 使用 AngularJS 和 ReactJS 的经验
  7. 关于css浮动的一点思考
  8. NOIP2018没有什么新闻
  9. Python线程指南 ---转自 http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html
  10. fcntl函数之文件锁 F_SETLK
  11. python和pytorch关系_pytorch 模拟关系拟合——回归实例
  12. python数据分析:Matplotlib
  13. 【时间序列分析】03.正态时间序列与严平稳序列
  14. 【洋哥聊运营】5点讲透增长
  15. Windows 关闭错误报告/弹窗
  16. 电信物联网平台,java后台对接电信北向应用,订阅平台消息
  17. 锐龙7 7840U参数 r7 7840U性能怎么样 r77840U相当于什么水平
  18. HTML实现可编辑下拉框
  19. Dlib模型实现人脸识别
  20. ChimeraX cryoEM 可视化教程:细菌ATP合酶

热门文章

  1. Proteus8.6 安装教程
  2. 北风网android,北风网JAVA/ASP.NET/Android系列公开课视频教程入门项目必学课程
  3. 迈入python游戏编程的大门,超详细的python环境搭建教程
  4. vscode实现右键文件夹选择open with code
  5. 深入浅出数据分析 - 数据分析引言
  6. 【C语言】C语言从入门到精通 | 第3章 数据类型(一)— 自学笔记
  7. 数据挖掘算法原理与实践:k-均值
  8. 分享 MSDN 下载工具(Word/PDF)
  9. 自己创建DXperience的本地资源文件
  10. 计算机科学导论5版答案,5计算机科学导论习题答案.doc