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
| LogType | Mô tả |
|---|---|
LogType.BROWSER | Console logs: console.log, error, warn, info từ trang web |
LogType.DRIVER | WebDriver internal logs (command/response) |
LogType.CLIENT | Client-side logs ( ít dùng) |
LogType.SERVER | Server-side logs (cần Selenium Grid/Standalone) |
LogType.PERFORMANCE | Chrome DevTools Protocol: network, timeline, v.v. (JSON format) |
Lưu ý
- Cần cấu hình
LoggingPreferencestrước khi khởi tạo driver. LogType.PERFORMANCEtrả 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
FirefoxOptionsvớimoz:firefoxOptionslogging 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.