使用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;
	}

  

原文地址:https://www.cnblogs.com/chongyou/p/9094055.html

时间: 2024-10-28 15:02:22

使用selenium 检测js报错的相关文章

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

Vue.js报错Failed to resolve filter问题原因 金刚 vue Vue.js js javascript 之前使用vue.js写分页功能时,写了一个过滤器,发现一个比较奇怪的错误. console控制台调试的时候 提示错误消息: Failed to resolve filter: HomePage console错误信息.jpg 我原来的写法: 原来的错误写法.jpg 错误原因 经过自己的摸索,后来发现竟然是代码顺序错误问题... 由于先执行的pageList,后执行的V

myeclipse js报错

Myeclipse 版本10.1 加载的js报错,解决方法: window -> preferences -> myeclipse -> validation,在右边下拉框找到 JavaScript validation for js files 将其勾选取消,然后 apply, 然后保存 . 这样项目中js就不会报错了.(此方法已验证可行!)

eclipse 导入项目js报错问题

eclipse 导入项目js报错问题 eclipse 导入项目后会出现项目中的js文件报错(红叉),如下图所示,有时候报错的文件很多,需要集中处理. 解决办法:右键项目名称>Properties>JavaScript>Include Path,在右侧选择"Source"选项卡, 然后选择项目中的"Excluded"分支,在右侧点击"Edit",如下图所示: 在弹出的"Inclusion and Exclusion Pa

phantomjs helloworld.js报错: Can&#39;t open &#39;helloworld.js&#39;

PhantomJS是一个无界面的,可脚本编程的WebKit浏览器引.它原生支持多种web 标准:DOM 操作,CSS选择器,JSON,Canvas 以及SVG. 当我安装好PhantomJS后,写下第一个js文件,运行发现报错. 我尝试了一些方法:比如将helloworld.js文件所在路径放到环境变量path下,发现这样运行徒劳无功. 后来,在http://bbs.fishc.com/forum.php?mod=viewthread&do=tradeinfo&tid=79336这个网页上

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

现场: OS  winserver 2008 IE8.0.6001.18702   JS报错,不能登陆 OS  XP   IE8.0.6001.18702CO     JS报错,不能登陆 公司测试: OS  WIN7  IE8.0.7601.17514  正常. OS  winserver 2008 R2  IE8.0.6001.19621 一开始不能登陆,设置后正常. OS  winserver 2003 IE8.0.6001.18702 与现场一样,一开始不能登陆,设置后正常. 两次设置相同

js报错“没有权限”

今天碰到的一个问题,简单总结下: sign.aspx中的JS代码: function Sign() { parent.SetValue("",""); parent.setSignDate(); } 执行到parent.setSignDate();时JS报错“没有权限”.都是同一个JS里的方法,怎么SetValue()没错,setSignDate()出错? 代码改成 function Sign() { parent.setSignDate(); parent.Set

运行node.js报错:Cannot find module &#39;../build/Release/bson&#39;] code: &#39;MODULE_NOT_FOUND&#39; } js-bson

具体报错内容: { [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' } js-bson: Failed to load c++ bson extension, using pure JS version   第一步: 找到 module mongodb ..node_modules\mongodb\node_modules\bson\ext\index.js 并改变bson引用的路径 bso

IE下js报错 SCRIPT1028: 缺少标识符、字符串或数字

今天一个jqueryUI的插件代码在IE下不能正常运行,调试了下,不是插件的问题. 这个错误原因一般都是多了个逗号括号什么的,IE检车的比较严格. 解决办法就是小心不要写多余的逗号括号什么的,或者不用IE(...) 报错代码如下: $("#postForm").validate({ rules : { title : "required", content : { required : true<span style="color:#ff0000;&

Selenium Grid 运行报错 Exception thrown in Navigator.Start first time -&gt;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 session Empty pool of VM for setup Capabilities [{platform=WINDOWS, ensureCleanSession=true, ignoreProtectedModeSettings=true, ignoreZoomSetting=true, enab