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. springboot与shiro在html中使用shiro标签

    上一章讲环境搭建 springboot与shiro和mybatis和mysql 现在讲html中怎么使用shiro标签,这里是基于上一章讲的 在pom文件引入依赖 <dependency> ...

  2. Python 日志文件处理

    今天想把 Python 项目中的日志 保存到文件中. 找到了方法.非常简单 https://www.cnblogs.com/nancyzhu/p/8551506.html 1. logging.bas ...

  3. 《Mysql 一条 SQL 语句是如何执行的?》

    一:概述 - 首先需要认识一下 Mysql 整体的基础架构 -  二:Mysql 的分层 - MySQL 可以分为 Server 层和存储引擎层两部分 - Server 层 - Server 层包括连 ...

  4. 服务提供者框架讲解 之 myJDBC

    利用一个简单的myJDBC,讲一下'服务提供者框架'的思想.主要是思想 目录 什么是 服务提供者框架 代码讲解 服务接口 服务提供者接口 服务注册API.服务访问API 静态工厂方法 服务实现类 – ...

  5. Python 【爬虫】

    爬虫的工作原理 首先,爬虫可以模拟浏览器去向服务器发出请求: 其次,等服务器响应后,爬虫程序还可以代替浏览器帮我们解析数据: 接着,爬虫可以根据我们设定的规则批量提取相关数据,而不需要我们去手动提取: ...

  6. Django Simple Captcha的使用

    Django Simple Captcha的使用 1.下载Django Simple Captcha django-simple-captcha官方文档地址 http://django-simple- ...

  7. 【全排列+子序列】Color

    [题意] 这个题目就是问,是否存在每个人对应每一种颜色,如果存在则输出字典序最小的. 否则输出-1 [题解] 利用next_permutation来构造36种情况.记住最后还需要排序一遍. 然后用子序 ...

  8. poj 1837 天平问题(01背包变种)

    题意:给你n个挂钩,m个砝码,要求砝码都用上,问有多少中方案数 题解:对于这道题目的状态,我们定义一个变量j为平衡度,当j=0的时候,表明天平平衡.定义dp[i][j]表达的含义为使用前n个砝码的时候 ...

  9. Thymeleaf 模板使用 Error resolving template "/home", template might not exist or might not be accessible by any of the

    和属性文件中thymeleaf模板的配置相关 1.配置信息 spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix= ...

  10. .NET Core中使用读取配置文件

    引入Nuget的两个类库 Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.Json 使用 var build ...