背景:接到一个需求,想检测页面是否能检测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报错的更多相关文章

  1. selenium执行js报错

    selenium执行js报错 Traceback (most recent call last):    dr.execute_script(js)  File "C:\Python27\l ...

  2. IE8.0.6001这个版本执行JS报错

    现场: OS  winserver 2008 IE8.0.6001.18702   JS报错,不能登陆 OS  XP   IE8.0.6001.18702CO     JS报错,不能登陆 公司测试: ...

  3. Vue.js报错Failed to resolve filter问题原因

    Vue.js报错Failed to resolve filter问题原因 金刚 vue Vue.js js javascript 之前使用vue.js写分页功能时,写了一个过滤器,发现一个比较奇怪的错 ...

  4. 解决MyEclipse中的js报错的小方法

    今天,下了个模版,但是导进去的时候发现js会报错.看了下其他都没有错误.而有一个js报错误,请原谅我有点红色强迫症,不能留一点红色 . 错误如下:Syntax error on token " ...

  5. 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 ...

  6. MyEclipse的JQuery.min.js报错红叉解决办法

    MyEclipse的JQuery.min.js报错红叉解决办法 1.选中报错的jquery文件"jquery-1.2.6.min.js".2.右键选择 MyEclipse--> ...

  7. 【前端】诸葛io收集前端js报错信息

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/zhuge_error.html 一.什么是诸葛io 诸葛io就是通过分析用户的操作事件对用户数据,行为路径等进行分 ...

  8. MyEclipse忽略js报错

    MyEclipse对官网下载的js报错,解决办法如下: 1. 对js文件右键选择 MyEclipse --> Exclude From Validation 2. 然后继续右键执行MyEclip ...

  9. Eclipse和MyEclipse使用技巧--解决MyEclipse中的js报错的小方法

    今天,下了个模版,但是导进去的时候发现js会报错.看了下其他都没有错误.而有一个js报错误,请原谅我有点红色强迫症,不能留一点红色 . 错误如下:Syntax error on token " ...

随机推荐

  1. CHUCK手把手带你搞定OPENSTACK

    一.OpenStack初探 1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运行自己的云计算和存储设施.Rackspace与NASA是最初重要 ...

  2. js 数字处理Number()

    //js将数字转换保留2位小数 function toDecimal(x) { var val = Number(x) if (!isNaN(parseFloat(val))) { //toFixed ...

  3. c++中enum 如何使用(转)

    ENUM概况 enum枚举类型是C/C++中的一种数据类型,与struct和class一样是用户自定义的类型,其特点在于enum类型的变量取值是有限的,是可以一一列举出来的. ENUM定义 C++ e ...

  4. 解决哈希(HASH)冲突的主要方法

    https://blog.csdn.net/xtzmm1215/article/details/47177701   虽然我们不希望发生冲突,但实际上发生冲突的可能性仍是存在的.当关键字值域远大于哈希 ...

  5. linux面试题:删除一个目录下的所有文件,但保留一个指定文件

    面试题:删除一个目录下的所有文件,但保留一个指定文件 解答: 假设这个目录是/xx/,里面有file1,file2,file3..file10 十个文件 [root@oldboy xx]# touch ...

  6. 研磨设计模式学习笔记2--外观模式Facade

    需求:客户端需要按照需求,执行一个操作,操作包括一个系统中的3个模块(根据配置选择是否全部执行). 外观模式优点: 客户端无需知道系统内部实现,,只需要写好配置文件,控制那些模块执行,简单易用. 外观 ...

  7. PV、UV、VV,CV的含义

    其中VV和CV是播放类指标,PV和UV是浏览类指标. 1. 播放类指标 VV(Video View,播放数),是指在一个统计周期内,视频被打开的次数之和. CV(Connect Views,内容播放数 ...

  8. 小萝卜控机大师录制脚本(手机app自动化)

    手机自动化测试 之前发布过小萝贝控机大师与按键精灵结合实现手机自动化测试的功能,小萝贝控机大师升级了实现了更多手机自动化测试的功能,如下: l 手机功能自动化测试:录制脚本,检查点时点击小萝贝控机大师 ...

  9. zuul路由网关

    zuul作为网关组件,主要用来管理api请求接口(统一对外暴露,负载均衡),身份认证,流量监控等.它是通过servlet来实现的,核心是一系列过滤器,可以在请求的发起跟相应返回阶段进行一系列的处理. ...

  10. vue学习笔记 vue

    目前为止对vue完全懵逼. 对着菜鸟教程,现在我尝试梳理下. 服务我已经启起来.可以看到页面 在src/App.vue里面有展示模板<template></template> ...