zoukankan      html  css  js  c++  java
  • 使用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;
    	}
    

      

  • 相关阅读:
    1924班网址
    20192414《网络空间安全导论》第一周学习总结
    H-Angry
    A-Plague Inc
    B-Rolling The Polygon
    F-Moving On
    A-Maximum Element In A Stack
    J-Word Search
    E-Pawns
    D-Lift Problems
  • 原文地址:https://www.cnblogs.com/chongyou/p/9094055.html
Copyright © 2011-2022 走看看