Selenium 捕获 console logs (Java)

目录

启用日志记录功能


有时候在进行自动化测试的时候控制台输出会帮忙定位问题,所以捕获控制台输出就显得很重要了~

Selenium 捕获 console logs (Java)_第1张图片

以下以selenium 4为例:

 我们可以使用driver.manage().logs().get(LogType.BROWSER)代码在Selenium中检索日志,该代码将返回一个包含所有控制台日志的LogEntries对象。

启用日志记录功能

在捕获日志之前,我们将在驱动程序实例中添加日志记录功能。

ChromeOptions options = new ChromeOptions();
 
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.BROWSER, Level.ALL);
options.setCapability(options.LOGGING_PREFS, logPrefs);
WebDriver driver = new ChromeDriver(options);

然后我们可以使用getLog()方法轻松地获取控制台日志。

LogEntries entry = driver.manage().logs().get(LogType.BROWSER);

这将返回一个日志条目列表,然后我们可以对其进行迭代并打印到控制台。

// Retrieving all logs
List logs = entry.getAll();
 
// Printing details separately
for (LogEntry e : logs) {
    System.out.println("Message: " + e.getMessage());
    System.out.println("Level: " + e.getLevel());
}

getMessage()打印控制台上显示的消息。
getLevel()打印消息的级别。它可以是INFO、WARNING、SEVERE等。
我们还可以使用getTimestamp()来获取在浏览器控制台上打印消息的时间戳。

import java.util.List;
import java.util.logging.Level;
 
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 org.testng.annotations.Test;
 
public class CodekruTest {
 
    @Test
    public void getLogs() {
 
        // pass the path of the chromedriver location in the second argument
        System.setProperty("webdriver.chrome.driver", "E:\\chromedriver.exe");
         
        ChromeOptions options = new ChromeOptions();
        LoggingPreferences logPrefs = new LoggingPreferences();
        logPrefs.enable(LogType.BROWSER, Level.ALL);
        options.setCapability(options.LOGGING_PREFS, logPrefs);
         
        WebDriver driver = new ChromeDriver(options);
        driver.get("https://testkru.com/TestUrls/TestConsoleLogs");
 
        LogEntries entry = driver.manage().logs().get(LogType.BROWSER);
 
        // Retrieving all logs  
        List logs = entry.getAll();
 
        // Printing details separately
        for (LogEntry e : logs) {
            System.out.println("Message: " + e.getMessage());
            System.out.println("Level: " + e.getLevel());
            System.out.println("Timestamp: "+ e.getTimestamp());
        }
 
    }
 
}

输出:

Message: https://testkru.com/TestUrls/TestConsoleLogs 102:30 "This is a console log by using the console.log() method"
Level: INFO
Timestamp: 1673764474531
Message: https://testkru.com/TestUrls/TestConsoleLogs 103:30 "This is an info log by using the console.info() method"
Level: INFO
Timestamp: 1673764474531
Message: https://testkru.com/TestUrls/TestConsoleLogs 104:30 "This is a debug log by using the console.debug() method"
Level: FINE
Timestamp: 1673764474531
Message: https://testkru.com/TestUrls/TestConsoleLogs 105:29 "This is a warning log by using the console.warn() method"
Level: WARNING
Timestamp: 1673764474531
Message: https://testkru.com/TestUrls/TestConsoleLogs 106:29 "This is an error log by using the console.error() method"
Level: SEVERE
Timestamp: 1673764474531

你可能感兴趣的:(Selenium,selenium,测试工具)