本文以禅道登录测试为例,思路主要分openBrowser、openUrl、findElement、sendVals、checkResult、ReadUserdate六部分

openBrowser

def openBrowser():    #实例化和返回webdriver对象,打开浏览器
driver = webdriver.Chrome()
return driver

openUrl

def openUrl(driver,url):    #传入webdriver对象和url
  driver.get(url)      #打开禅道地址,地址信息放到Excel表中进行维护,具体见ReadUserdate模块获取数据
  driver.set_window_size(1280,1080)    #设置浏览器大小,或打开全屏driver.maximize_window
  driver.find_element_by_link_text('开源版').click()  #点击选择开源版

findElement

def findElement(driver,arg):    #定位登录用户、密码、登录按钮元素位置,arg参数为传出web信息,具体见ReadUserdate
actelem = driver.find_element_by_id(arg['actid'])
pwdelem = driver.find_element_by_name(arg['pwdname'])
loginelem = driver.find_element_by_id(arg['loginid'])
return actelem,pwdelem,loginelem

sendValues

def sendValues(eletuple,arg):    #进行用户名、密码输入操作,点击登录
listkey = ['account','password']
i = 0
for key in listkey:        #对findEleent中的用户名、密码、登录按钮元素进行操作
eletuple[i].send_keys('')  #输入空格
eletuple[i].clear()      #清除输入框,当输入错误密码时清除,为下一个用户做登录
eletuple[i].send_keys(arg[key])  #输入用户名、密码
i += 1
eletuple[2].click()  #点击的登录按钮

checkResult

def checkResult(driver,asserele):  #登录成功断言
result = False
try:
driver.find_element_by_link_text(asserele)  #如果找到“asserele”元素(传参),即登录成功,返回True
print('Account And Pwd Right!')
result = True
except:
print('Account And Pwd Error!')
return result

logout

def logout(driver,test_dict):    #注销操作
driver.find_element_by_class_name(test_dict['toggle']).click()
driver.find_element_by_link_text(test_dict['logout']).click()

login_test

def login_test(test_dict,act_dict):    #登录测试
d = openBrowser()            #打开浏览器
openUrl(d,test_dict['url'])      #打开禅道地址
ele_tuple = findElement(d,test_dict)  #定义元素对象
for user_arg in act_dict:
sendValues(ele_tuple,user_arg)    #输入用户名、密码、点击登录
sleep(1)
result = checkResult(d,test_dict['error'])  #断言
sleep(2)
if result:
logout(d,test_dict)    #注销
ele_tuple = findElement(d,test_dict)  #重新获取元素
sleep(5)
d.quit()

ReadUserdate,主要实现数据与代码分离(Xlrd模块使用可看这篇文章参考:https://www.cnblogs.com/Archer-Xin/p/12142417.html)  

import codecs
import xlrd
import datetime
from xlrd.xldate import xldate_as_tuple def get_excel_userinfo(file):    #获取用户信息表数据
colnum = 0
sheet_name = '第一页'
'''
file:默认文件路径及名称;
colnum:默认第一行的值为表头;
sheet_name:默认读取excel表中名称为”第一页“的工作表。
'''
book = xlrd.open_workbook(file) #打开excel文件返回Book对象
sheet1 = book.sheet_by_name('第一页') #获取”第一页“工作表对象;获取第一个工作表
colnames = sheet1.row_values(colnum) #获取第一行的值,作为表头
nrows = sheet1.nrows #获取表中的有效行数 list = [] #定义返回数据为列表形式
for rownum in range(1,nrows): #从第2行开始遍历每行的数据
rowvalues = sheet1.row_values(rownum)
if rowvalues:
dictlist = {} #定义获取的用户信息为字典形式
for i in range(len(colnames)): #遍历表头值个数
ctype = sheet1.cell(rownum,i).ctype #获取单元格数据类型,empty(为空)为0;string为1;number为2;date为3;boolean为4;error为5
cellvalues = sheet1.cell_value(rownum,i)
if ctype == 2: #number类型转化为整形
cellvalues = int(cellvalues)
'''
#日期转换,还存在问题
elif ctype == 4:
date = datetime(xldate_as_tuple(cellvalues, 1))
cellvalues = date.strftime('%Y/%d/%m %H:%M:%S')
'''
dictlist[colnames[i]] = cellvalues #将遍历每行中的值赋值给对应的表头值,并添加到dictlist字典中
list.append(dictlist)
return list    #返回为列表 def get_excel_webinfo(file):    #获取web界面信息表数据
book = xlrd.open_workbook(file)
sheet1 = book.sheet_by_index(0)
ncols = sheet1.ncols
nrows = sheet1.nrows
colvalues1 = sheet1.col_values(0)
colvalues2 = sheet1.col_values(1)
list = {}      #返回字典集
for rownum in range(nrows):      #第一列数据等于第二列数据
list[colvalues1[rownum]] = colvalues2[rownum]
return list  

整体代码:  

from selenium import webdriver
from time import sleep
from selenium.webdriver.support.wait import WebDriverWait
from ReadUserdate import get_webinfo,get_userinfo,get_excel_userinfo,get_excel_webinfo def openBrowser():
driver = webdriver.Chrome()
return driver def openUrl(driver,url):
driver.get(url)
driver.set_window_size(1280,1080)
driver.find_element_by_link_text('开源版').click() def findElement(driver,arg):
actelem = driver.find_element_by_id(arg['actid'])
pwdelem = driver.find_element_by_name(arg['pwdname'])
loginelem = driver.find_element_by_id(arg['loginid'])
return actelem,pwdelem,loginelem def sendValues(eletuple,arg):
listkey = ['account','password']
i = 0
for key in listkey:
eletuple[i].send_keys('')
eletuple[i].clear()
eletuple[i].send_keys(arg[key])
i += 1
eletuple[2].click() def checkResult(driver,asserele):
result = False
try:
driver.find_element_by_link_text(asserele)
print('Account And Pwd Right!')
result = True
except:
print('Account And Pwd Error!')
return result def logout(driver,test_dict):
driver.find_element_by_class_name(test_dict['toggle']).click()
driver.find_element_by_link_text(test_dict['logout']).click() def login_test(test_dict,act_dict):
d = openBrowser()
openUrl(d,test_dict['url'])
ele_tuple = findElement(d,test_dict)
for user_arg in act_dict:
sendValues(ele_tuple,user_arg)
sleep(1)
result = checkResult(d,test_dict['error'])
sleep(2)
if result:
logout(d,test_dict)
ele_tuple = findElement(d,test_dict)
sleep(5)
d.quit() if __name__ == '__main__':
  #运行程序进行测试
test_dict = get_excel_webinfo(r'F:\学习文件\Python文件\ZenDaoRobotTest\webinfo.xlsx')
act_dict = get_excel_userinfo(r'F:\学习文件\Python文件\ZenDaoRobotTest\userinfo.xlsx')
login_test(test_dict,act_dict)
 

excel数据表:

程序为使用表中用户名、密码进行登录,如果用户名、密码都正确,则进行注销,再使用下一个用户名、密码进行登录,所以只需要对userinfo的Excel文件的用户数据进行设计,无需修改代码。比如正确用户名和密码;错误用户名和正确密码;正确用户名和错误密码等,具体需求具体分析,根据需求设计用户信息

运行结果:

ReadUserdate获取到的数据形式:

需要使用什么值,只需要指定字典中对应的键值即可

  

  

python+selenium自动化禅道登录测试的更多相关文章

  1. Python+Selenium 自动化实现实例-获取测试对象的Css属性

    #coding:utf-8 '''获取测试对象的css属性场景 当你的测试用例纠结细枝末节的时候,你就需要通过判断元素的css属性来验证你的操作是否达到了预期的效果.比如你可以通过判断页面上的标题字号 ...

  2. Python接口自动化测试脚本-实现禅道登录

    未来应用方向:UI自动化测试或接口自动化测试发现的Bug可自动录入禅道,带截图与相关报错信息. #!/usr/bin/env python # -*- coding: UTF-8 -*- '''=== ...

  3. python selenium自动化点击页面链接测试

    python selenium自动化点击页面链接测试 需求:现在有一个网站的页面,我希望用python自动化的测试点击这个页面上所有的在本窗口跳转,并且是本站内的链接,前往到链接页面之后在通过后退返回 ...

  4. python+selenium自动化登录dnf11周年活动界面领取奖励登录部分采坑总结[1]

    背景: Dnf的周年庆活动之一,游戏在6月22日 06:00~6月23日 06:00之间登陆过游戏后可以于6月25日 16:00~7月04日 06:00领取奖励 目标:连续四天自动运行脚本,自动领取所 ...

  5. Python+Selenium自动化-安装模块和浏览器驱动操作方法

    Python+Selenium自动化-安装模块和浏览器驱动操作方法 1.安装模块文件 pip install selenium 2.安装浏览器驱动 我们主要用的浏览器驱动有chrome浏览器.fire ...

  6. Python+selenium 自动化-启用带插件的chrome浏览器,调用浏览器带插件,浏览器加载配置信息。

    Python+selenium 自动化-启用带插件的chrome浏览器,调用浏览器带插件,浏览器加载配置信息.   本文链接:https://blog.csdn.net/qq_38161040/art ...

  7. Python+Selenium自动化总结

    Python+Selenium自动化总结 1.环境搭建 1.1.安装selenium模块文件 pip install selenium 1.2.安装ChromeDriver驱动 [1]下载安装Chro ...

  8. Python+Selenium自动化-定位一组元素,单选框、复选框的选中方法

    Python+Selenium自动化-定位一组元素,单选框.复选框的选中方法   之前学习了8种定位单个元素的方法,同时webdriver还提供了8种定位一组元素的方法.唯一区别就是在单词elemen ...

  9. Python+Selenium自动化-模拟键盘操作

    Python+Selenium自动化-模拟键盘操作   0.导入键盘类Keys() selenium中的Keys()类提供了大部分的键盘操作方法:通过send_keys()方法来模拟键盘上的按键. # ...

随机推荐

  1. 基于S2SH开发学生考勤管理系统 附源码

    开发环境: Windows操作系统开发工具:Eclipse+Jdk+Tomcat+mysql数据库 运行效果图 源码及原文链接:http://javadao.xyz/forum.php?mod=vie ...

  2. Phpstorm 2020-01-04试了可用的激活码【亲测可用】WebStrom

    [直接点击试用30天] http://myphp.vip/ 测试时间:2018-10-12可用(v2019.2) 测试时间:2019-12-24可用(v2019.2) 测试时间:2020-01-04可 ...

  3. 高级UI组件(二)

    1.图像视图 <ImageView android:id="@+id/imageView" android:layout_width="wrap_content&q ...

  4. cf938D

    题意简述:n个点m条边的无向图,有点权,有边权, 对于每一个点计算,d(i,j)表示点i到点j的最短路 题解:边权扩大二倍,建立源点,然后源点向每一个点x连接一条权值为a[x]的边,然后跑最短路即可 ...

  5. 关于GC(垃圾回收)

    当我用new创建一个对象时,当可分配的内存不足GC就会去回收未使用的对象,但是GC的操作是非常复杂的,会占用很多CPU时间,对于移动设备来说频繁的垃圾回收会严重影响性能.下面的建议可以避免GC频繁操作 ...

  6. lucas定理及其拓展的推导

    lucas定理及其拓展的推导 我的前一篇博客-- lucas定理 https://mp.csdn.net/mdeditor/100550317#主要是给出了lucas的结论和模板,不涉及推导. 本篇文 ...

  7. 浅谈python的第三方库——numpy(终)

    本文作为numpy系列的总结篇,继续介绍numpy中常见的使用小贴士 1 手动转换矩阵规格 转换矩阵规格,就是在保持原矩阵的元素数量和内容不变的情况下,改变原矩阵的行列数目.比如,在得到一个5x4的矩 ...

  8. 用R实现范式编程

    面向函数范式编程(Functional programming) 模拟简单的随机过程 模拟一个简单的随机过程:从N~(0,1)标准正态分布中产生100个随机值,反复5次得到一个list,再以每个lis ...

  9. Selenium实战(五)——HTML测试报告

    一.概览下载与安装 HTMLTestRunner是unittest的一个扩展,可以生成易于使用的HTML测试报告.HTMLTestRunner是在BSD许可证下发布的. 下载地址:http://tun ...

  10. JVM和线程池

    本文链接:https://blog.csdn.net/liuwenliang_002/article/details/90074283 ————————————————版权声明:本文为CSDN博主「3 ...