Selenium สามารถจับ browser console logs ได้ผ่าน RemoteWebDriver และการตั้งค่า log level
Prerequisites
- Selenium 4+
- ChromeDriver รองรับ logging
- ต้อง enable logging capabilities
การตั้งค่า Logging Preferences
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.logging.LogType;
import org.openqa.selenium.logging.LoggingPreferences;
import java.util.logging.Level;
ChromeOptions options = new ChromeOptions();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.BROWSER, Level.ALL); // ระดับ ALL, SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST
options.setCapability("goog:loggingPrefs", logPrefs);
WebDriver driver = new ChromeDriver(options);
ตัวอย่างโค้ดสมบูรณ์
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.logging.LogEntries;
import org.openqa.selenium.logging.LogEntry;
import org.openqa.selenium.logging.LogType;
import org.openqa.selenium.logging.LoggingPreferences;
import java.util.logging.Level;
public class BrowserLogsExample {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver",
"C:\\Users\\ghs6kor\\Desktop\\Java\\chromedriver.exe");
// ตั้งค่า logging
ChromeOptions options = new ChromeOptions();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.BROWSER, Level.ALL);
options.setCapability("goog:loggingPrefs", logPrefs);
WebDriver driver = new ChromeDriver(options);
try {
driver.get("https://www.tutorialspoint.com/index.htm");
// ทำ action ที่ก่อให้เกิด log (เช่น ค้นหา)
driver.findElement(By.id("gsc-i-id1")).sendKeys("Selenium");
// รอสักครู่ให้ log เกิดขึ้น
Thread.sleep(2000);
// ดึง browser logs
LogEntries logEntries = driver.manage().logs().get(LogType.BROWSER);
System.out.println("=== Browser Console Logs ===");
for (LogEntry entry : logEntries) {
System.out.printf("[%s] %s: %s%n",
entry.getLevel(), entry.getTimestamp(), entry.getMessage());
}
// กรองเฉพาะ SEVERE (error)
System.out.println("\n=== Only SEVERE Errors ===");
logEntries.filter(Level.SEVERE).forEach(entry ->
System.out.println(entry.getMessage()));
} catch (Exception e) {
e.printStackTrace();
} finally {
driver.quit();
}
}
}
Log Types ที่รองรับ
| Log Type | คำอธิบาย |
|---|---|
LogType.BROWSER | Console logs จาก JavaScript (console.log, error, warning) |
LogType.DRIVER | Logs จาก WebDriver เอง |
LogType.CLIENT | Logs จาก client side |
LogType.SERVER | Logs จาก server (ถ้ารองรับ) |
LogType.PERFORMANCE | Performance timing logs (Chrome) |
Log Levels (java.util.logging.Level)
SEVERE (highest) → WARNING → INFO → CONFIG → FINE → FINER → FINEST (lowest)
การใช้งานจริง: ตรวจสอบ JavaScript Errors ใน Test
public void assertNoJavaScriptErrors(WebDriver driver) {
LogEntries logs = driver.manage().logs().get(LogType.BROWSER);
List errors = logs.filter(Level.SEVERE).toList();
if (!errors.isEmpty()) {
StringBuilder sb = new StringBuilder("JavaScript errors found:\n");
for (LogEntry error : errors) {
sb.append(error.getMessage()).append("\n");
}
throw new AssertionError(sb.toString());
}
}
หมายเหตุ
- วิธี
((RemoteWebDriver) driver).setLogLevel(Level.INFO)ในต้นฉบับเป็นวิธีเก่า (Selenium 3) ให้ใช้LoggingPreferencesแทน - Browser logs จะ reset ทุกครั้งที่ navigate ไปหน้าใหม่
- Performance logs ต้อง enable
LogType.PERFORMANCEและใช้ CDP commands