目录
有时候在进行自动化测试的时候控制台输出会帮忙定位问题,所以捕获控制台输出就显得很重要了~
以下以selenium 4为例:
我们可以使用driver.manage().logs().get(LogType.BROWSER)代码在Selenium中检索日志,该代码将返回一个包含所有控制台日志的LogEntries对象。
启用日志记录功能
在捕获日志之前,我们将在驱动程序实例中添加日志记录功能。
java
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()方法轻松地获取控制台日志。
java
LogEntries entry = driver.manage().logs().get(LogType.BROWSER);
这将返回一个日志条目列表,然后我们可以对其进行迭代并打印到控制台。
java
// Retrieving all logs
List<LogEntry> 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()来获取在浏览器控制台上打印消息的时间戳。
java
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<LogEntry> 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());
}
}
}
输出:
bash
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