Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Thu thập nhật ký trình duyệt (Browser Logs) với Selenium WebDriver Java

Selenium cho phép truy xuất nhật ký trình duyệt (console logs, network logs, performance logs) thông qua RemoteWebDriver và LoggingPreferences. Kỹ thuật này hữu ích cho debug lỗi JS, theo dõi request mạng, phân tích hiệu năng.

Kích hoạt logging (Chrome)

import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.logging.LogType;
import org.openqa.selenium.logging.LoggingPreferences;
import org.openqa.selenium.remote.CapabilityType;
import java.util.logging.Level;

ChromeOptions options = new ChromeOptions();
LoggingPreferences logs = new LoggingPreferences();
logs.enable(LogType.BROWSER, Level.ALL);      // Console logs
logs.enable(LogType.PERFORMANCE, Level.ALL);  // Performance/Network logs (Chrome DevTools)
logs.enable(LogType.DRIVER, Level.ALL);       // WebDriver internal logs
options.setCapability(CapabilityType.LOGGING_PREFS, logs);

WebDriver driver = new ChromeDriver(options);

Đọc browser logs

import org.openqa.selenium.logging.LogEntries;
import org.openqa.selenium.logging.LogEntry;
import org.openqa.selenium.logging.LogType;

LogEntries entries = driver.manage().logs().get(LogType.BROWSER);
for (LogEntry entry : entries) {
    System.out.println("[" + entry.getLevel() + "] " + entry.getMessage());
    // entry.getTimestamp() - thời gian
    // entry.getSource() - nguồn log
}

Ví dụ hoàn chỉnh: Bắt lỗi JavaScript console

public class BrowserLogsExample {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        
        ChromeOptions options = new ChromeOptions();
        LoggingPreferences logs = new LoggingPreferences();
        logs.enable(LogType.BROWSER, Level.ALL);
        options.setCapability(CapabilityType.LOGGING_PREFS, logs);
        
        WebDriver driver = new ChromeDriver(options);
        
        try {
            driver.get("https://www.example.com/page-with-js-errors");
            
            // Trigger JS error (ví dụ)
            ((JavascriptExecutor) driver).executeScript("console.error('Test error from Selenium');");
            ((JavascriptExecutor) driver).executeScript("throw new Error('Intentional error');");
            
            // Đọc logs
            LogEntries browserLogs = driver.manage().logs().get(LogType.BROWSER);
            System.out.println("=== BROWSER CONSOLE LOGS ===");
            for (LogEntry log : browserLogs) {
                System.out.printf("[%s] %s%n", log.getLevel(), log.getMessage());
            }
        } finally {
            driver.quit();
        }
    }
}

Log Types phổ biến

LogTypeMô tả
LogType.BROWSERConsole logs: console.log, error, warn, info từ trang web
LogType.DRIVERWebDriver internal logs (command/response)
LogType.CLIENTClient-side logs ( ít dùng)
LogType.SERVERServer-side logs (cần Selenium Grid/Standalone)
LogType.PERFORMANCEChrome DevTools Protocol: network, timeline, v.v. (JSON format)

Lưu ý

  • Cần cấu hình LoggingPreferences trước khi khởi tạo driver.
  • LogType.PERFORMANCE trả về JSON phức tạp, thường parse bằng thư viện (Gson, Jackson) hoặc dùng CDP trực tiếp (Selenium 4+).
  • Firefox dùng FirefoxOptions với moz:firefoxOptions logging prefs khác biệt.
  • Log entries bị xóa sau khi đọc (get logs consuming). Nên lưu lại nếu cần phân tích sau.