自动化测试-18.selenium之bugFree代码注释
#encoding=utf-8
import xlrd,time,os
from xlutils.copy import copy
from selenium import webdriver def getTestData(excelPath,sheetName):
'''
定义从excel文件中获取数据
:param excelPath: excel文件路径
:param sheetName: 表格中的页签名
:return: 返回测试数据字段
'''
# 打开存有测试数据的excel
xl = xlrd.open_workbook(excelPath)
# 指定打开某个页签的table
table = xl.sheet_by_name(sheetName)
# 获取表中的第一行,用来做字典的key进行存储,返回的是列表从第一列到最后一列
listKey = table.row_values(0)
# 用于存放测试数据
listTestData = []
# 外围for循环取到的是行
for i in range(1,table.nrows):
# 将存取的每次数据存在空字典内
dicData = {}
# 内部for循环取到的是列
for j in range(0,table.ncols):
# key为第一行的每列,value为每行的列值
dicData.update({listKey[j]:table.cell_value(i,j)})
listTestData.append(dicData)
print('取到的数据为:')
# 遍历取到的每行数据
for rowData in listTestData:
print(rowData)
# 返回测试数据
return listTestData def writeResultToExcel(excelPath,sheetName,listRe,reResultFiles):
'''
定义函数,先复制测试用例表格模板,再往里面写入实际结果,测试结果以及截图路径
:param excelPath: 需要复制的excel模板路径
:param sheetName: 被复制末班中的页签名
:param listRe: 列表类型,其内部数据为字典类型,列表中包含实际结果,测试结果,截图路径的存取数据字典
:param reResultFiles: 写入完成后保存的excel路径
:return:
'''
# 打开指定路径的excel文件
xl = xlrd.open_workbook(excelPath,encoding_override='utf-8')
# 打开对应页签的表
table = xl.sheet_by_name(sheetName)
# 复制模板
excelMudle = copy(xl)
# 获取到sheetName对应的表
mudleTable = excelMudle.get_sheet(sheetName)
# 获取模板表中有多少列数
cols = table.ncols
# 获取模板表中有多少行数
rows = table.nrows
for rowsName in listRe[0].keys():
# 每次往第一行最新的列写入表头
mudleTable.write(0,cols,rowsName)
# 列索引往后移动一位
cols+=1
#逐行写数据,从第2行开始写,写到最后一行,每行是一次测试结果,每次测试结果放在字典中
for i in range(1,rows):
'''
listRe[0]是第二行索引为1的测试结果,listRe[1]是第三行索引为2的测试结果,行值和数据存储存字典索引相差1
每次往第i行写数据 写 listRe[i-1]的数据
实际结果,i是行索引,cols-3是列的倒数第3个列,cols-2是列的倒数第2个列,cols-1是列的倒数第1个列
'''
mudleTable.write(i,cols-3,listRe[i-1]['realyResult'])
# 测试结果
mudleTable.write(i,cols-2,listRe[i-1]['testResult'])
# 截图路径
mudleTable.write(i,cols-1,listRe[i-1]['pngPath'])
# 保存测试结果
excelMudle.save(reResultFiles) def removeDir(dirPath):
'''
删除Windows下文件夹里面的所有文件和子文件夹
:param dirPath: 要删除的文件夹路径
:return: None
'''
# 读取要删除的目录下所有文件和子目录
listTopDir = os.listdir(dirPath)
for item in listTopDir:
# 如果是子目录则递归删除
if os.path.isdir(dirPath+'\\'+item):
# 删除子目录中的文件
removeDir(dirPath+'\\'+item)
# 删除子目录
os.rmdir(dirPath+'\\'+item)
# 如果是文件则直接删除
else:
os.remove(dirPath+'\\'+item) def bugfreeLogin(driver,dic):
'''
bugfree登录功能
:param driver: 浏览器对象
:param dic: dic数据字典
:return: 返回dicRe,字典内的键值对与
'''
dicRe = {}
realyResult,testResult,pngPath='','',''
# 打开登录页面
driver.get(str(dic['url']))
driver.find_element_by_id('LoginForm_username').clear()
# 输入用户名
driver.find_element_by_id('LoginForm_username').send_keys(str(dic['username']))
driver.find_element_by_id('LoginForm_password').clear()
# 输入密码
driver.find_element_by_id('LoginForm_password').send_keys(str(dic['password']))
# 点击登录按钮
driver.find_element_by_id('SubmitLoginBTN').click()
time.sleep(3)
#获取提示信息用于判断测试结果,如果登录成功则判断页面展示"欢迎, 系统管理员",如果登录失败则判断提示信息
try:
# 登录成功
realyResult = driver.find_element_by_css_selector('.user-info').text
except:
# 登录失败,取提示信息
realyResult = driver.find_element_by_id('login-error-div').text
else:
#登录成功,退出系统
driver.find_element_by_link_text('退出').click() #判断结果
if (dic['yuqiResult'] in realyResult): # 预期结果与实际结果一致
# 记录测试结果
testResult = 'PASS'
else: ##预期结果与实际结果不一致
# 记录测试结果
testResult = 'FAIL'
# 保存路径
pngPath = os.getcwd() + '\\errorPng\\' + time.strftime('%Y-%m-%d %H-%M-%S', time.localtime()) + '.png'
# 截图保存在pngPath变量存储的路径中
driver.get_screenshot_as_file(pngPath)
# 往测试结果字典中插入一条测试数据,存储的内容以realyResult、testResult、pngPath为键值
dicRe.update({'realyResult': realyResult, 'testResult': testResult, 'pngPath': pngPath})
return dicRe if __name__ == '__main__':
# 调用removeDir删除report目录下的所有文件或目录
removeDir(os.getcwd()+'\\report')
# 调用removeDir删除errorpng目录下的所有文件或目录
removeDir(os.getcwd()+'\\errorpng')
# 启动Firefox驱动
driver = webdriver.Firefox()
# 设置driver驱动的全局定时等待最长时间为5秒
driver.implicitly_wait(5)
# 定义空的列表,用于存储测试字典数据
listRe= []
# 取到测试数据的excel文档路径
fpath = os.getcwd()+'\\testData\\bugfree_login.xls'
# 取到excel表中页签为login的表
sheetName = 'login'
# 结果文档的路径
resultPath= os.getcwd()+'\\report\\test_result '+time.strftime('%Y-%m-%d %H-%M-%S',time.localtime())+'.xls'
# 读取测试数据
list1 = getTestData(fpath,sheetName)
# 此循环用于遍历测试用例中的用例数
for i in list1:
# 每一条测试数据,执行一次登录
dicResult = bugfreeLogin(driver,i)
# 往列表中存储我们测试结果中的字典数据
listRe.append(dicResult)
print listRe
#往测试结果文档写数据:复制测试数据文档+写入:实际结果、测试结果、截图路径
writeResultToExcel(fpath, sheetName, listRe, resultPath)
# 关闭所有浏览器
driver.quit()
自动化测试-18.selenium之bugFree代码注释的更多相关文章
- 自动化测试-20.selenium常用JS代码执行
前言: 在工作中有些控件定位不到,需要操作,使用JS代码去修改或者操作达到selenium不能做的操作. 1.Web界面的滑动 1 #coding:utf-8 2 from selenium impo ...
- 小白学 Python 爬虫(28):自动化测试框架 Selenium 从入门到放弃(下)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 《零成本实现Web自动化测试--基于Selenium》 第五章 Selenium-RC
一. 简介 Selenium-RC可以适应更复杂的自动化测试需求,而不仅仅是简单的浏览器操作和线性执行.Selenium-RC能够充分利用编程语言来构建更复杂的自动化测试案例,例如读写文件.查询数据库 ...
- C++统计代码注释行数 & 有效代码行数 & 代码注释公共行 & 函数个数
问题来源,在14年的暑假的一次小项目当中遇到了一个这样的问题,要求统计C++代码的注释行数,有效代码行数,代码注释公共行数,以及函数个数. 下面稍微解释一下问题, 1)注释行数:指有注释的行,包括有代 ...
- 篇5 python自动化测试应用-Selenium环境篇
篇5 python自动化测试应用-Selenium环境篇 --lamecho 1.1概要 大家好!我是lamecho(辣么丑),从本篇开始我将开始 ...
- eoLinker 新功能发布,增加了识别代码注释自动生成文档功能
产品地址:https://www.eolinker.com开源代码:https://www.eolinker.com/#/os/download在线生成代码注释工具:http://tool.eolin ...
- Python用户输入和代码注释
一.用户输入 若你安装的是Python3.x版本,当你在Python IDLE(编辑器) 中输入以下代码: name = input('用户名:') print('Hello',name) 保存并执行 ...
- Kotlin------函数和代码注释
定义函数 Kotlin定义一个函数的风格大致如下 访问控制符 fun 方法名(参数,参数,参数) : 返回值类型{ ... ... } 访问控制符:与Java有点差异,Kotlin的访问范围从大到小分 ...
- linux内核代码注释 赵炯 第三章引导启动程序
linux内核代码注释 第三章引导启动程序 boot目录中的三个汇编代码文件 bootsect.s和setup.s采用近似intel的汇编语法,需要8086汇编器连接器as86和ld86 head ...
随机推荐
- Linux 文件时间记录属性 调优
Linux 文件时间属性介绍 atime:(access time)显示的是文件中的数据最后被访问的时间,比如系统的进程直接使用或通过一些命令和脚本间接使用.(执行一些可执行文件或脚本) mtime: ...
- nmon监控数据分析
性能测试中,各个服务器资源占用统计分析是一个很重要的组成部分,通常我们使用nmon这个工具来进行监控以及监控结果输出. 一. 在监控阶段使用类似下面的命令 ./nmon -f write_3s_20v ...
- Codeforces 17E Palisection - Manacher
题目传送门 传送点I 传送点II 传送点III 题目大意 给定一个串$s$询问,有多少对回文子串有交. 好像很简单的样子. 考虑能不能直接求,感觉有点麻烦.因为要考虑右端点在当前回文子串内还有区间包含 ...
- 尚硅谷面试第一季-17Redis 在项目中的使用场景
数据类型 使用场景 String 比如说 ,我想知道什么时候封锁一个IP地址.Incrby命令 Hash 存储用户信息[id,name,age] Hset(key,field,value) Hset( ...
- linux shell中如何删除指定后缀名的文件?
答: find . -name '*.txt' -delete 这条命令含义如下: 从当前目录开始查找以txt为后缀名的文件并删除掉
- Machine Learning--week2 多元线性回归、梯度下降改进、特征缩放、均值归一化、多项式回归、正规方程与设计矩阵
对于multiple features 的问题(设有n个feature),hypothesis 应该改写成 \[ \mathit{h} _{\theta}(x) = \theta_{0} + \the ...
- 论文笔记:Dynamic Multimodal Instance Segmentation Guided by Natural Language Queries
Dynamic Multimodal Instance Segmentation Guided by Natural Language Queries 2018-09-18 09:58:50 Pape ...
- Java 爬虫学习
Java爬虫领域最强大的框架是JSoup:可直接解析具体的URL地址(即解析对应的HTML),提供了一套强大的API,包括可以通过DOM.CSS选择器,即类似jQuery方式来取出和操作数据.主要功能 ...
- LINQ to Entities 不识别方法“System.String get_Item(Int32)”,因此该方法无法转换为存储表达式。
1.LINQ to Entities 不识别方法“System.String get_Item(Int32)”,因此该方法无法转换为存储表达式.项目中发现linq to entities 不识别? , ...
- Android 回退键监听
回退键(back)监听:方法1:回调方法onBackPressed String LOG_TAG="TAG"; @Override public void onBackPr ...