driver.manage()。logs()。get(“浏览器”);再次调用时不起作用

时间:2019-03-05 05:12:16

标签: java selenium selenium-webdriver automated-tests

我正在尝试使用Selenium Webdriver捕获Chrome的浏览器控制台日志。我在@Test方法中两次使用了以下方法。第一次执行时,它将返回控制台日志,但是当我再次调用它时,它将返回一个空日志条目。

public String getConsoleLogs(WebDriver driver)
{
     String consoleError="";
     LogEntries log=driver.manage().logs().get("browser"); 
     for(LogEntry entry:logs.getAll())
            {
                  consoleError+=entry.toString()
             }
     return consoleError;
}

编辑:更改了代码,以使我的问题更加清楚。当第二次调用此方法时,consoleError是空字符串。

4 个答案:

答案 0 :(得分:2)

它返回日志条目而不是字符串。使用以下内容可以解决您的问题

 for (LogEntry entry : driver.manage().logs().get(LogType.BROWSER)) {
        String msg = entry.getMessage();
        System.err.println("Message: " + msg);
    }

答案 1 :(得分:1)

driver.manage().logs().get("browser");的返回类型是LogEntries而不是String 只需更改它

public LogEntries getConsoleLogs(WebDriver driver) {
    return driver.manage().logs().get("browser");
}

您已获取所有日志条目,然后需要随时进行迭代

例如

for (LogEntry entry : getConsoleLogs(driver)) {
        System.out.println(entry.getMessage());
    }

答案 2 :(得分:0)

driver.manage().logs().get(LogType.BROWSER)的类型是LogEntries,而不是String

如果您需要String,请执行以下操作:

public String getConsoleLogs(WebDriver driver) {
    LogEntries logEntries = driver.manage().logs().get(LogType.BROWSER);
    String consoleLog = "";

    for (LogEntry logEntry : logEntries.getAll()) {
        consoleLog += logEntry.toString() + "\n";
    }

    return  consoleLog;
}

如果您需要File,请执行以下操作:

public static File writeLogEntriesInATextFile(WebDriver driver, String name) throws IOException {
    LogEntries logEntries = driver.manage().logs().get(LogType.BROWSER);
    File consoleLog = File.createTempFile(name, "txt");
    FileWriter output = new FileWriter(consoleLog);
    for (LogEntry logEntry : logEntries.getAll()) {
        output.write(logEntry.toString() + "\n");
    }
    output.close();

    return consoleLog;
}

请记住,这不适用于FireFox <65

答案 3 :(得分:0)

引用Webdriver文档:

  

请注意,每次调用后都会重置日志缓冲区,这意味着可用的日志条目对应于给定日志类型尚未返回的那些条目。实际上,这意味着此调用将返回自上次调用以来或从会话开始以来的可用日志条目。

如果这不符合您的需求,则需要在读取日志时将其推入堆栈中,以便以后参考。