Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

จับ Browser Logs ด้วย Selenium WebDriver ใน Java

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.BROWSERConsole logs จาก JavaScript (console.log, error, warning)
LogType.DRIVERLogs จาก WebDriver เอง
LogType.CLIENTLogs จาก client side
LogType.SERVERLogs จาก server (ถ้ารองรับ)
LogType.PERFORMANCEPerformance 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