【问题标题】:Console logs in GWT do not appear in Chrome Driver during tests在测试期间,GWT 中的控制台日志不会出现在 Chrome 驱动程序中
【发布时间】:2018-01-10 16:27:35
【问题描述】:

在 GWT 中,我使用以下方法在 Web 浏览器控制台中显示调试消息:

Log.debug("@@@ Debug");

我正在使用 Chrome 驱动程序运行一些测试,并且正在使用以下方法打印控制台的内容:

public static void displayConsoleContent() {
    LogEntries logs = getWebDriver().manage().logs().get(LogType.BROWSER);

    System.out.println("Console content:\n--------------------------------------------------");
    for (LogEntry log: logs.getAll()) {
        System.out.println("* " + log.toString());
    }
    System.out.println("--------------------------------------------------");
}

当我手动转到应该出现调试消息的网页时,它会正确显示在控制台中。

但是,当我在测试期间打印控制台的内容时,没有出现该消息(不过,我从其他来源获得了其他消息)。

这就是我设置 Web 驱动程序的方式:

private static void setUpChrome() {
        System.setProperty("webdriver.chrome.driver", "/home/user/chromedriver");

        Configuration.browser = "chrome";
        ChromeOptions options = new ChromeOptions();
        options.setBinary("/usr/bin/google-chrome");

        LoggingPreferences loggingPreferences = new LoggingPreferences();
        loggingPreferences.enable(LogType.BROWSER, Level.ALL);
        options.setCapability(CapabilityType.LOGGING_PREFS, loggingPreferences);

        options.setCapability(CapabilityType.SUPPORTS_JAVASCRIPT, true);
        ChromeDriver webDriver = new ChromeDriver(options);
        WebDriverRunner.setWebDriver(webDriver);
    }

为什么使用 Chrome 驱动时控制台中没有出现调试信息?

【问题讨论】:

    标签: java google-chrome gwt


    【解决方案1】:

    在开发过程中我使用 GWT.log,它非常方便并且在运行时得到优化。对我有用。

    static void     log(java.lang.String message)
    static void     log(java.lang.String message, java.lang.Throwable e)
    

    在开发模式下将消息记录到开发 shell 记录器,或者 到超级开发模式的控制台。

    文档:http://www.gwtproject.org/javadoc/latest/com/google/gwt/core/client/GWT.html#log-java.lang.String-

    另一方面,如果您运行已编译的代码,则 GWT.log 将被优化。

    一个快速而肮脏的替代方法是使用丑陋的 JSNI 直接登录到控制台(如果它有效,您可以在未来变得更漂亮)。

    public static final native void log(Object o) /*-{
         console.log(o);
    }-*/;
    

    应该这样做

    【讨论】:

    • 这给了我同样的结果。看我的回答。
    • 我没有注意到您 1 月 12 日的编辑,但使用 JSNI 的解决方案有效。问题确实是在生产模式下删除 GWT.log 调用的优化。
    • 如果你想改进它(以及一般的 JS 库和 API 交互),你应该看看 Js Interop 和 Elemental2。
    猜你喜欢
    • 2018-06-12
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 2018-10-28
    • 2021-11-24
    相关资源
    最近更新 更多