py+selenium 自动判断页面是否报错并显示在自动化测试报告【原创】
有需求就会去研究解决的路子。
现在需求就是,测试报告报错信息一堆,但却无法肉眼看出是什么问题,你只能知道定位不到元素或是超时,但你却不知道其实进入页面就报错了或是提交表单就报错了!也就是看到报错,需要进一步去手工实际操作看看到底为啥定位不到元素或是为啥超时了。
这就是平常比较抓头的测试报告图。

最近我就想写个方法,判断页面报错,显示在测试报告里,减少手工的检验,其实也很简单。
# 测试进入页面是否报错
def httpcode(self, link): self.driver.switch_to.parent_frame()
self.driver.switch_to.frame("fraLeftFrame") # 拼接当前访问的url
# href = self.driver.find_element_by_link_text(link).get_attribute('href')
href = self.driver.find_element_by_xpath("//a[text()='%s']" % link).get_attribute('href')
href = re.findall("(\/.*)\"\)", href)
ipport = re.findall("(http://.*)\/", self.driver.current_url)
url = ipport[0] + href[0] cookies = {"JSESSIONID": self.driver.get_cookies()[0]['value'], "jforumSSOCookieNameUser": "xxxx"} res = requests.get(url, cookies=cookies, stream=True) # 判断是否响应200
if res.status_code != 200: print("********** http请求错误,页面报错 **********\n"
"(访问", url, "页面报错", res.status_code, ")\n")
raise urllib.error.HTTPError()
else:
print("********** http请求响应200 **********") self.driver.switch_to.parent_frame()
self.driver.switch_to.frame("fraRightFrame")
无视方法里前后的进入frame哈,由于页面需要登录,所以我需要获取当前cookie加入到request里,这个根据你自己的系统实际需求设计。
其实主要的思路就是,访问页面时,用request请求对应页面(因为无直接链接,所以上面的代码是拼接出页面的链接),根据响应是否为200来判断页面是否报错,如果非200,那就抛出异常。
而调用时,则是放在显示等待前面,这样页面报错,就不用去跑30秒等待着元素了,报错反而更快的退出进入下一条用例。

上面是页面访问报错的问题处理,而下面我又写了个,提交表单报错的处理,更简单。
仅提供思路,不一定适用所有系统。
因为目标系统提交报错跳转的报错页面,都是同个页面,那么就可以通过定位报错页面里面的某个元素来判断,如果发现元素存在则抛出异常,不存在则继续。

虽说上面两种方法,不能将所有报错可能都判断出来,但也至少判断了7成,大大的减少人工检验。
现在的报告是这样:

如有错误,请及时指正,谢谢!
py+selenium 自动判断页面是否报错并显示在自动化测试报告【原创】的更多相关文章
- py+selenium+unittest遇到HTMLTestRunner_cn文件报错:ZeroDivisionError: float division by zero【已解决】
问题:遇到HTMLTestRunner_cn文件报错:ZeroDivisionError: float division by zero HTMLTestrunner_cn.py是从网上下的,照理说应 ...
- selenium + PhantomJS使用时 PhantomJS报错解决
selenium + PhantomJS使用时 PhantomJS报错解决 在做动态网页爬虫时用到了selenium + PhantomJS,安装好之后运行时报错: UserWarning: Sele ...
- 刚新建好的动态网站项目,创建jsp页面就报错
拿到刚刚可以运行的Eclipse,就马上想敲码了,但一创建项目之后再创建jsp页面就报错= =! 报错的内容大概为缺乏对应的jar包. 我们常用Tomcat为中间体,而他本身是带有开发jsp网站的对应 ...
- 刚新建好的动态网站项目,创建jsp页面就报错??
拿到刚刚可以运行的Eclipse,就马上想敲码了,但一创建项目之后再创建jsp页面就报错= =! 报错的内容大概为缺乏对应的jar包. 我们常用Tomcat为中间体,而他本身是带有开发jsp网站的对应 ...
- php引入html页面 css报错 404
php引入html页面 css报错 404, html页面内 有css, 有一样 是这么写的 结果就报错了, 原来是 -moz这一句,在这句前面随便加一句别的样式就可以....
- 访问远程mysql数据库,出现报错,显示“1130 - Host'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server“
在使用Navicat for MySQl访问远程mysql数据库,出现报错,显示“1130 - Host'xxx.xxx.xxx.xxx' is not allowed to connect to t ...
- 如何解决JSP页面顶端报错 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
题目有点长,昨天刚接触jsp,按照网上的教程安装完 tomcat 和 eclipse EE 之后,新建jsp文件却出现了如下报错: The superclass "javax.servlet ...
- Django-自己写的py文件调用models&Non-ASCII character报错&url接收参数
1.这个设置是网上能查到的最多的,但是没解决我的问题: Django的models.py在外部独立使用,新建一个文件夹,和monitor1目录平级 import sys,os sys.path.app ...
- eureka2.0页面404报错问题--之坑
eureka页面报错问题404页面如下 在复制pom文件的时候,记得启动eureka注册中心的pom文件引入依赖是否正确 启动类注解也要注意是否引用正确
随机推荐
- 零元学Expression Blend 4 - Chapter 17 用实例了解互动控制项「CheckBox」I
原文:零元学Expression Blend 4 - Chapter 17 用实例了解互动控制项「CheckBox」I 本章将教大家如何运用CheckBox做实作上的变化:教你如何把CheckBox变 ...
- 创建dll动态链接库,并使用java调用
参考文章:http://www.cnblogs.com/matthew-2013/p/3480296.html http://blog.csdn.net/g710710/article/details ...
- 【Qt】无边框窗体中带有ActiveX组件时的一个BUG
无意中发现的一个BUG,Qt5.1.1正式版首先创建一个GUI工程,拖入一个QAxWidget控件(为了使ActiveX生效,需要在.pro文件中加入CONFIG += qaxcontainer)接着 ...
- NSmutableArray 的实现原理机制
古老的C数组: 优点:查询速度很快,直接通过下表找到对应的值 缺点:修改.删除数据很慢,需要移动基于所有的其他的元素 插入和删除一个元素,需要移动后面所有的元素 改进的目标:实现快速增加,删除 N ...
- 使用Func<T1, T2, TResult> 委托返回匿名对象
Func<T1, T2, TResult> 委托 封装一个具有两个参数并返回 TResult 参数指定的类型值的方法. 语法 public delegate TResult Func< ...
- mac 下重启 MYSQL 命令
在mac 下重启mysql的命令如下: 启动MySQL服务 sudo /usr/local/MySQL/support-files/mysql.server start 停止MySQL服务 sud ...
- Java逆序输出整数
题目要求:编写方法reverseDigit,将一个整数作为参数,并反向返回该数字.例如reverseDigit(123)的值是321.同时编写程序测试此方法. 说明:10的倍数的逆序,均以实际结果为准 ...
- 8天入门docker系列 —— 第六天 搭建自己的私有镜像仓库Registry
这一篇我们来聊聊私有仓库的搭建,其实不管你是通过docker build还是compose的方式进行构建,最终还是要将生成好的镜像push到远程的仓库中,这样多个 平台可以方便的获取你registry ...
- C# Redis分布式锁(基于ServiceStack.Redis)
相关的文章其实不少,我也从中受益不少,但是还是想自己梳理一下,毕竟自己写的更走心! 首先给出一个拓展类,通过拓展方法实现加锁和解锁. 注:之所以增加拓展方法,是因为合理使用拓展类(方法),可以让程序更 ...
- java虚拟机-GC-GC算法
在C/C++中是由程序员自己去申请.管理和释放内存的,因此没有GC的概念.而在Java中,专门有一个用于垃圾回收的后台线程来进行监控.扫描,自动将一些无用的内存进行释放.下面介绍几种常见的GC算法. ...