1.一般的错误类型

2.查看错误提示,是一个div,以id为例找到该元素

3.修改测试用例

def checkResult(driver,err_id):
try:
err = driver.find_element_by_id(err_id)
print ("ACCOUNT AND PWD ERROR!")
print (err.text)
except:
print ("ACCOUNT AND PWD RIGHT!")

4.新增日志接口,保存数据

#coding:UTF-8
import time class Loginfo(object):
"""dpath = '',mode = 'w'tring for Loginfo"""
def __init__(self, path = '',mode = 'w'):
fname = path + time.strftime('%y-%m-%d',time.gmtime()) #文件名字为年月日
self.log = open(path + fname +'.txt',mode) def log_write(self,msg):
self.log.write(msg) def log_close(self):
self.log.close() if __name__ == '__main__':
log = Loginfo() #打开文件
log.log_write('test Loginfo 测试') #写入
log.log_close() #关闭

执行上述代码,可看到同一目录下生成了一个以今天的年月日为标题的文本文件

把代码引入登录脚本中

from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from login import get_webinfo
from login import get_userinfo
from log_module import Loginfo def openBrower(): #配置浏览器
webdriver_handle = webdriver.Firefox()
return webdriver_handle def openUrl(handle,url): #打开url
handle.get(url) def get_ele_times(driver,times,func):
return WebDriverWait(driver,times).until(func) #等待方法 def findElement(driver,arg):
'''
arg must be dict
1.login:登录入口
2.user_xpath:用户名
3.pwd_xpath:密码
4.login_xpath:登录按钮 return useEle,pwdEle,loginEle
'''
ele_login = get_ele_times(driver,10,lambda driver:driver.find_element_by_xpath(arg['login']))
ele_login.click()
useEle = driver.find_element_by_xpath(arg['user_xpath'])
pwdEle = driver.find_element_by_xpath(arg['pwd_xpath'])
loginEle = driver.find_element_by_xpath(arg['login_xpath'])
return useEle,pwdEle,loginEle def sendVals(eletuple,arg):
'''
ele tuple
account:uname,pwd
'''
listkey = ['uname','pwd']
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,err_id,arg,log):
time.sleep(2)
try:
err = driver.find_element_by_id(err_id)
print ("ACCOUNT AND PWD ERROR!")
msg = '%s %s:error:%s'%(arg['uname'],arg['pwd'],err.text) #保存用户名和密码,错误信息
log.log_write(msg)
except:
print ("ACCOUNT AND PWD RIGHT!")
msg = '%s %s:pass:'%(arg['uname'],arg['pwd']) #保存用户名和密码
        log.log_write(msg)

def login_test(ele_dict,user_list):
driver = openBrower()
log = Loginfo()
openUrl(driver,ele_dict['url'])
driver.maximize_window() ele_tuple = findElement(driver,ele_dict) #接收字典的值
for arg in user_list:
sendVals(ele_tuple,arg)
checkResult(driver,ele_dict['errorid'],arg,log)
log.close()
if __name__ == '__main__':
url = 'http://www.maiziedu.com/'
account = 'xxx'
pwd = 'maizi123456'
'''
ele_dict = {'url':url,'login':'/html/body/div[2]/div/div/div/div/a[2]','user_xpath':'//*[@id="id_account_l"]',\
'pwd_xpath':'//*[@id="id_password_l"]','login_xpath':'//*[@id="login_btn"]',\
'errorid':'该账号不正确'}
user_list = [{'uname':account,'pwd':pwd}]
'''
ele_dict = get_webinfo(r'C:\Users\xxx\Desktop\webinfo.txt')
user_list = get_userinfo(r'C:\Users\xxx\Desktop\userinfo.txt')
#file webinfo/userinfo ele_dict = get_webinfo(path) user_list = get_userinfo(path)
login_test(ele_dict,user_list)

5.多用户测试

先增加注销操作

def checkResult(driver,err_id,arg,log):
result = False
try:
err = driver.find_element_by_id(err_id)
print ("ACCOUNT AND PWD ERROR!")
msg = 'uname=%s pwd=%s:error:%s\n'%(arg['uname'],arg['pwd'],err.text)
log.log_write(msg)
except:
print ("ACCOUNT AND PWD RIGHT!")
msg = 'uname=%s pwd=%s:pass\n'%(arg['uname'],arg['pwd'])
log.log_write(msg)
result = True
return result
def logout(driver,ele_dict):
driver.find_element_by_class_name(ele_dict['usermenu']).click()
driver.find_element_by_link_text(ele_dict['logout']).click() def login_test(ele_dict,user_list):
driver = openBrower()
log = Loginfo()
openUrl(driver,ele_dict['url'])
driver.maximize_window()
ele_tuple = findElement(driver,ele_dict) #接收字典的值
for arg in user_list:
sendVals(ele_tuple,arg)
result = checkResult(driver,ele_dict['errorid'],arg,log)
if result:
logout(driver,ele_dict) #logout
ele_tuple = findElement(driver,ele_dict) #login
log.log_close()

如果想测试用户名或密码为空的情况,要修改userinfo(uname=1;pws=2),以‘;’为分隔

Selenium(十)测试用例错误处理、日志接口、多用户测试的更多相关文章

  1. 《手把手教你》系列基础篇(八十四)-java+ selenium自动化测试-框架设计基础-TestNG日志-上篇(详解教程)

    1.简介 TestNG还为我们提供了测试的记录功能-日志.例如,在运行测试用例期间,用户希望在控制台中记录一些信息.信息可以是任何细节取决于目的.牢记我们正在使用Selenium进行测试,我们需要有助 ...

  2. python接口自动化(三十九)- logger 日志 - 上(超详解)

    简介 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP, ...

  3. Java学习笔记二十八:Java中的接口

    Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...

  4. 10 hbase源码系列(十)HLog与日志恢复

    hbase源码系列(十)HLog与日志恢复   HLog概述 hbase在写入数据之前会先写入MemStore,成功了再写入HLog,当MemStore的数据丢失的时候,还可以用HLog的数据来进行恢 ...

  5. python+selenium十:selenium的二次封装

    python+selenium十:基于原生selenium的二次封装   from selenium import webdriverfrom selenium.webdriver.support.w ...

  6. Spring常犯的十大错误,你踩过吗?

    1.错误一:太过关注底层 我们正在解决这个常见错误,是因为 "非我所创" 综合症在软件开发领域很是常见.症状包括经常重写一些常见的代码,很多开发人员都有这种症状. 虽然理解特定库的 ...

  7. Selenium 4.0 Alpha更新日志

    早在2018年8月,整个测试自动化社区就发生了一件重大新闻:Selenium的创始成员Simon Stewart在班加罗尔Selenium会议上正式确认了Selenium 4的发布日期和一些重要更新. ...

  8. Selenium WebDriver Log4j打印执行日志

    在自动化测试脚本的执行过程中,使用log4j在日志文件中打印执行日志,用于监控和后续调试脚本. Log4j.xml 文件 <log4j:configuration xmlns:log4j=&qu ...

  9. 在C#应用中使用Common Logging日志接口

    我在C#应用中一般使用log4net来记录日志,但如果项目中有个多个工程,那么没有工程都需要引用log4neg,感觉很不爽.不过今日在开spring.net的时候,看到了有个通用日志接口Common ...

随机推荐

  1. windows服务器入门 mysql的安装

    钱的问题   只能安装mysql了 下载MySQL 5.5(其他的版本都可以的  只是在这里以mysql5.5为例)安装包(下载地址:http://dev.mysql.com/downloads/my ...

  2. C语言--函数嵌套调用

    一.实验作业(6分) 本周作业要求: 选一题PTA题目介绍. 学习工程文件应用,设计实现学生成绩管理系统. 学生成绩管理系统要求 设计一个菜单驱动的学生成绩管理程序,管理n个学生m门考试科目成绩,实现 ...

  3. Airflow怎么删除系统自带的DAG任务

    点击这个按钮 找到dag文件所在路径,并进入路径将其文件删除即可

  4. db2 数据库配置HADR+TSA添加集群节点

    Db2配置HADR高可用+TSA添加集群节点 一.服务器资源 Master IP:10.78.10.1 数据库:dbclassSlave IP:10.78.10.2 数据库:dbclassVIP:10 ...

  5. Windows 下redis的安装和使用

    1.下载 Window 下载地址:https://github.com/MSOpenTech/redis/releases 查找版本对应的一个MSI或者zip文件下载 2.安装 MSI文件需要安装 z ...

  6. WUSTOJ 1277: 小吉吉读书(Java)

    1277: 小吉吉读书 题目   有一本 n 页的书,每天都看 ai 页,已知星期 k 买的书,问星期几能看完?更多内容点击标题. 分析   统计出一个星期能看 a 页,看了 a 页又会回到买书的那一 ...

  7. Python中下划线的5种含义

    目录 单前导下划线 _var 当涉及到变量和方法名称时,单个下划线前缀有一个约定俗成的含义. 它是对程序员的一个提示 - 意味着Python社区一致认为它应该是什么意思,但程序的行为不受影响. 单末尾 ...

  8. package.json 版本解释

    指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本.波浪号(tilde)+ 指定版本:比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不 ...

  9. (二)Redis之Jedis概念和HelloWorld实现以及JedisPool的使用

    一.Jedis概念 实际开发中,我们需要用Redis的连接工具连接Redis然后操作Redis, 对于主流语言,Redis都提供了对应的客户端: 官网:https://redis.io/clients ...

  10. (二十一)SpringBoot之集成mybatis:使用mybatis xml

    一.引入maven依赖 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...