0

我正在 Selenide 中运行一些测试,我需要在某些时候显示浏览器控制台的内容:

LogEntries logs = getWebDriver().manage().logs().get(LogType.BROWSER);

System.out.println(logs.getAll().size());
for (LogEntry log: logs.getAll()) {
    System.out.println(log.getMessage());
}

但是,结果我得到了一个空列表(唯一记录的是0)。在执行测试的每个步骤时,我手动检查了控制台此时不应为空。

有关信息,这是我创建 Web 驱动程序的方式:

private static void setUpPhantomJS() {
    Configuration.browser = "phantomjs";

    DesiredCapabilities caps = DesiredCapabilities.phantomjs();
    caps.setJavascriptEnabled(false);
    caps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS,
                Arrays.asList("--ignore-ssl-errors=true", "--webdriver-loglevel=INFO"));
    caps.setCapability(CapabilityType.SUPPORTS_ALERTS, true);

    PhantomJSDriver webDriver = new PhantomJSDriver(caps);
    webDriver.setLogLevel(Level.ALL);
    WebDriverRunner.setWebDriver(webDriver);    
}

为什么我得到一个空列表?

4

3 回答 3

1

在 webdriver日志模块中,您将在下面找到注意:

只有少数浏览器支持远程日志记录 API(尤其是 Firefox 和 Chrome)。Firefox 支持基本的日志记录功能,而 Chrome 提供了强大的性能日志记录选项。远程日志记录仍然被认为是一个非标准特性,并且该模块为其公开的 API 是非冻结的。一旦 W3C WebDriver 规范正式定义日志记录,此模块将被更新,可能会破坏向后兼容性。

PhantomJS 似乎不支持远程日志记录 API。

于 2018-01-10T10:07:46.520 回答
0

正如 yong 所说,phantom js 不支持远程日志记录。但是您可以在默认位置获取 phantom js 日志文件,也可以使用命令行参数设置日志文件路径。

capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS,
new String[] { 
       "--web-security=no", 
       "--ignore-ssl-errors=yes",
       "--webdriver-logfile="usr/local/logs/phantomjsdriver.log"
});

否则你可以设置系统属性'phantomjs.logfile.path'

System.setProerty("phantomjs.logfile.path',<file path>);

默认情况下,日志文件在具有名称的 phantomjs 目录中可用phantomjs.log

于 2018-01-10T10:42:57.393 回答
0

收到空列表的另一个可能原因是之前已读取控制台日志。当我通过以下方式阅读 Ruby / Capybara 中的日志时:

page.driver.browser.manage.logs.get(:browser)

我得到了日志,但是如果我再次阅读它,我会得到一个空列表,直到页面被刷新。

于 2020-01-17T19:44:35.850 回答