使用selenium 檢測js報錯

背景:接到一個需求,想檢測頁面是否能檢測js報錯,何爲js報錯,以下圖所示,在控制檯中,使用console,若是有js報錯,就會出現錯誤html

 

如何檢測,簡單版操做,打開一個url,使用manage獲取瀏覽器的日誌,這樣會打印出這個頁面獲取的內容java

@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,每次都會記錄他的日誌,咱們原理實際也就是利用他的日誌,對咱們須要的數據進行篩選oop

可是真實場景,每每不多是對一個url進行檢測,須要打開不少url進行檢測,查看某個url中包含哪些js有問題,這裏就會有一個坑,由於driver每次會一直記錄頁面的錯誤,因此當打開網頁後,輸入多個url,進行篩選時,會重複把之前的數據在進行過濾,那每次拿到對應的url的日誌,目前本身想到的2種解決辦法:性能

1.每次都實例driver,讓他作爲一個新對象,咱們拿到的數據也是某個url對應的日誌,可是這樣耗時太長,性能差測試

2.糾結了好久,換了個思路,拿到一個url的日誌對象,取出內容,在get其餘新url時,判斷日誌是否有值,有值進行刪除,這樣每次打開url都會拿到最新的urlurl

 

/**
	 * 
	* @測試點: 檢查 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;
	}
相關文章
相關標籤/搜索