java、selenium監控后台接口


一、 Maven工程引入Jar包

<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.1.0</version>
</dependency>

二、監控瀏覽器日志

ChromeDriver browserDriver = new ChromeDriver(options);
DevTools devTools = browserDriver.getDevTools();
devTools.createSession();
devTools.send(Log.enable());
//添加監聽器用於處理瀏覽器日志
devTools.addListener(Log.entryAdded(),
logEntry -> {
BrowserLogParse.parseBrowseLog(logEntry,browserDriver);
});
devTools.send(Performance.enable(Optional.empty()));

//回調方法用於處理瀏覽器日志,打印錯誤日志
public static void parseBrowseLog(LogEntry logEntry, ChromeDriver driver) {
if (logEntry.getLevel().equals(org.openqa.selenium.devtools.v96.log.model.LogEntry.Level.ERROR)) {
     System.out.println(logEntry.getText());
    }
}

三、監控網絡請求響應

NetworkInterceptor interceptor = new NetworkInterceptor(
browserDriver,
(Filter)next->req->{
HttpResponse res;
try {
long startTime=System.currentTimeMillis(); //獲取開始時間
res = next.execute(req);
long endTime = System.currentTimeMillis(); //獲取結束時間
          System.out.println(logEntry.getText());
          //對網絡請求、響應進行處理
BrowserLogParse.parseNetwork(NetWorkRecord.builder()
.startTime(startTime)
.endTime(endTime)
.request(req)
.response(res)
.build(),browserDriver);
return res;

}catch (Exception e){
log.info("無響應異常"+e.getMessage());
BrowserLogParse.addTimeOutRequest(req.getUri());
}
return new HttpResponse();
});

 //對網絡請求、響應進行處理
public static void parseNetwork(NetWorkRecord record,ChromeDriver driver){
long cost = record.getEndTime()-record.getStartTime();
if(cost >3000){
log.info("網絡監控-慢響應:" +record.getRequest().toString());
}

if(!record.getResponse().isSuccessful()){
log.info("網絡監控-失敗響應:" +record.toString());
return;
}

     //判斷是否restfull響應
if(Objects.isNull(record.getResponse().getHeader("Content-Type")))
return;
if(record.getResponse().getHeader("Content-Type").contains("application/json") && record.getResponse().getStatus() == 200){
String code = "";
String bodyStr = "";
try {
          //解析響應體
bodyStr = Contents.string(record.getResponse());
code = JSONObject.parseObject(bodyStr).getString("code");
}catch (Exception e){
return;
}
if(StringUtils.isNotBlank(code) && !(code.equals("200") || code.equals("0"))){
          log.info("頁面:"+driver.getCurrentUrl()+"<br>"+"請求:"+Contents.string(record.getRequest())+"<br>"+"響應:"+bodyStr);
            }
}
}
 

四、監控JS異常

Consumer<JavascriptException> addEntry = BrowserLogParse.jsExceptionsList::add;
devTools.getDomains().events().addJavascriptExceptionListener(addEntry);

五、獲取頁面性能數據

HashMap<String,Object> map = Maps.newHashMap();
map.put("timeDomain","timeTicks");
browserDriver.executeCdpCommand("Performance.enable",map);
//獲取頁面性能數據
List<Metric> metricList = driver.getDevTools().send(Performance.getMetrics());


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM