使用selenium 检测js报错
背景:接到一个需求,想检测页面是否能检测js报错,何为js报错,如下图所示,在控制台中,使用console,如果有js报错,就会出现错误
如何检测,简单版操作,打开一个url,使用manage获取浏览器的日志,这样会打印出这个页面获取的内容
@Test
public void test2(){
op.loopGet("https://www.rosewholesale.com/cheapest/chic-embossing-braid-5-pieces-3027854.html", 50, 3, 60); //这个就是打开页面的方法,只是自己进行了封装
LogEntries logEntries = driver.manage().logs().get(LogType.BROWSER);
for (LogEntry entry : logEntries) {
Log.logInfo(" "+entry.getLevel()+ " "+entry.getMessage()); }
在日志中会打印出内容包含sever和waring,server就是js报错
自己理解的原理:实际使用的driver中日志信息,然后进行过滤,可以在源码中看到LogType.BROWSER不止这一种,还有获取客户端,等其他,如下图 你会发现其实在启动driver,每次都会记录他的日志,我们原理实际也就是利用他的日志,对我们需要的数据进行筛选
但是真实场景,往往不可能是对一个url进行检测,需要打开很多url进行检测,查看某个url中包含哪些js有问题,这里就会有一个坑,因为driver每次会一直记录页面的错误,所以当打开网页后,输入多个url,进行筛选时,会重复把以前的数据在进行过滤,那每次拿到对应的url的日志,目前自己想到的2种解决办法:
1.每次都实例driver,让他做为一个新对象,我们拿到的数据也是某个url对应的日志,但是这样耗时太长,性能差
2.纠结了很久,换了个思路,拿到一个url的日志对象,取出内容,在get其他新url时,判断日志是否有值,有值进行删除,这样每次打开url都会拿到最新的url
/**
*
* @测试点: 检查 js是否有报错
* @验证点: 如果传入的url中有报错,返回报错信息
@param urllist 传入的url
@param timeout 页面超时时间
@param loopTimes 重试次数
@param timeoutDefault 默认加载页面的时间
@return 报错的url和报错的信息
* @备注: HashMap<String,List<String>>
* @author zhangjun
* @date 2018年5月24日
@修改说明
*/
public HashMap<String, List<String>> checkJsSEVERE(List<String> urllist, int timeout, int loopTimes, int timeoutDefault){
List<String> levelList;
HashMap<String, List<String>> severeLevel = new HashMap<String, List<String>>();
LogEntries logEntries = driver.manage().logs().get(LogType.BROWSER);
for (int i = 0; i < urllist.size(); i++) {
try {
if (logEntries.getAll().isEmpty() == false) { //判断是否有内容
logEntries.iterator().remove(); //有内容进行删除
}
} catch (Exception e) {
}
String get_url = urllist.get(i); //在重新进行删除
loopGet(get_url, timeout, loopTimes, timeoutDefault);
levelList = new ArrayList<String>();
logEntries = driver.manage().logs().get(LogType.BROWSER);
for (LogEntry entry : logEntries) {
Object level = entry.getLevel();
String getLevel = String.valueOf(level);
if (getLevel.equals("SEVERE")) {
levelList.add(entry.getMessage());
}
}
severeLevel.put(get_url, levelList);
}
return severeLevel;
}
使用selenium 检测js报错的更多相关文章
- selenium执行js报错
selenium执行js报错 Traceback (most recent call last): dr.execute_script(js) File "C:\Python27\l ...
- IE8.0.6001这个版本执行JS报错
现场: OS winserver 2008 IE8.0.6001.18702 JS报错,不能登陆 OS XP IE8.0.6001.18702CO JS报错,不能登陆 公司测试: ...
- Vue.js报错Failed to resolve filter问题原因
Vue.js报错Failed to resolve filter问题原因 金刚 vue Vue.js js javascript 之前使用vue.js写分页功能时,写了一个过滤器,发现一个比较奇怪的错 ...
- 解决MyEclipse中的js报错的小方法
今天,下了个模版,但是导进去的时候发现js会报错.看了下其他都没有错误.而有一个js报错误,请原谅我有点红色强迫症,不能留一点红色 . 错误如下:Syntax error on token " ...
- Selenium Grid 运行报错 Exception thrown in Navigator.Start first time ->Error forwarding the new session Empty pool of VM for setup Capabilities
Selenium Grid 运行报错 : Exception thrown in Navigator.Start first time ->Error forwarding the new se ...
- MyEclipse的JQuery.min.js报错红叉解决办法
MyEclipse的JQuery.min.js报错红叉解决办法 1.选中报错的jquery文件"jquery-1.2.6.min.js".2.右键选择 MyEclipse--> ...
- 【前端】诸葛io收集前端js报错信息
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/zhuge_error.html 一.什么是诸葛io 诸葛io就是通过分析用户的操作事件对用户数据,行为路径等进行分 ...
- MyEclipse忽略js报错
MyEclipse对官网下载的js报错,解决办法如下: 1. 对js文件右键选择 MyEclipse --> Exclude From Validation 2. 然后继续右键执行MyEclip ...
- Eclipse和MyEclipse使用技巧--解决MyEclipse中的js报错的小方法
今天,下了个模版,但是导进去的时候发现js会报错.看了下其他都没有错误.而有一个js报错误,请原谅我有点红色强迫症,不能留一点红色 . 错误如下:Syntax error on token " ...
随机推荐
- Linux系统lvm管理
pv: 物理卷,被pv命令处理过的物理分区vg:物理卷组 被组装到一起的物理卷pe: 物理扩展 lvm设备的最小存储单元 lvm是pe的整数倍lvm:逻辑卷 ...
- 一个简单的基于MINI2440开发板的启动代码
1. S3C2440大概的启动流程(NAND启动): ①设置CPU为SVC模式 ②关闭看门狗 ③屏蔽中断 ④关闭MMU ⑤初始化时钟 ⑥初始化内存(SDRAM) ⑦初始化栈指针(SP, R13) ⑧初 ...
- vue(2)创建项目
1.创建项目 cmd到自己指定目录下,执行 vue init webpack-simple hello-vue 2.安装项目依赖 cd hello-vue cnpm install 3.运行该项目,测 ...
- 转 oracle 默认自动统计信息 时间修改
############sql3: https://blog.csdn.net/dataminer_2007/article/details/41363417http://blog.51cto.com ...
- android studio NDK配置
向您的项目添加 C 和 C++ 代码 本文内容 下载 NDK 和构建工具 创建支持 C/C++ 的新项目 构建和运行示例应用 向现有项目添加 C/C++ 代码 创建新的原生源文件 创建 CMake 构 ...
- =与==、&与&&、| 与 || 的区别
=与== =属于赋值运算符,将右侧的值赋给左侧的变量名称 ==属于关系运算符,判断左右两边值是否相等,结果为boolean类型 &与&& &是逻辑与,&& ...
- 利用Intent.ACTION_SEND进行分享
安卓系统本身可以很简便的实现分享功能,因为我们只需向startActivity传递一个ACTION_SEND的Intent,系统就为我们弹出一个应用程序列表.其实在系统的文件管理器中,这应该是我们常用 ...
- vs2012配置使用entity framework 6
项目中使用mysql作为数据库,想快速地实现一些数据服务,为了节省开发时间,提升开发效率,性能不是考虑的重点,所以选择了使用ORM框架:Entity Framework.指定了DB的table des ...
- 定义与声明、头文件与extern总结(转)
本文转自: http://lpy999.blog.163.com/blog/static/117372061201182051413310/ http://blog.csdn.net/feitianx ...
- nodejs卸载安装
作为新手nodejs卸载后安装就总出错,今天记录了详细的步骤: 参考一下网址:写的很详细https://jingyan.baidu.com/article/48b37f8dd141b41a646488 ...