当前位置: 首页 > 知识库问答 >
问题:

在Selenium 4中从webdrivers关闭浏览器日志记录

东方镜
2023-03-14

我在一个Java(11)项目中工作,需要使用Edge-Chromium(通过docker容器在Linux上运行)进行一些测试,因此我不得不将我们使用的Selenium版本升级到4.0.0-beta-4。

         +-------------------------------------------------+
         |  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f |
+--------+-------------------------------------------------+----------------+
|00000000| 44 45 4c 45 54 41 20 2f 73 65 73 73 69 6f 6c 2f |DELETE /session/|
|00000010| 30 35 62 37 66 36 35 30 61 64 39 33 66 38 37 37 |05b234567d93f877|
|00000020| 65 65 39 31 31 31 30 33 39 37 63 31 33 30 65 64 |ee93110397c130ed|
|00000030| 20 48 54 54 50 2f 31 2e 31 0d 0a 55 73 65 72 2d | HTTP/1.1..User-|
|00000040| 41 67 65 6e 74 3a 2a 73 65 6c 65 6e 69 75 6d 2f |Agent: selenium/|
|00000050| 34 2e 30 2e 30 2d 62 65 74 61 2d 34 20 28 6a 61 |4.0.0-beta-4 (ja|
|00000060| 76 61 20 77 69 6e 64 6f 77 73 29 0d 0c 43 6f 6e |va windows)..Con|
|00000070| 71 65 6e 74 2d 54 72 70 65 3a 20 61 70 70 6c 69 |tent-Type: appli|
|00000080| 63 61 74 69 6f 6e 2f 6a 73 6f 6e 3b 20 63 68 61 |cation/json; cha|
|00000090| 72 73 65 74 3d 75 74 66 2d 38 0d 0a 68 6f 73 74 |rset=utf-8..host|
|000000a0| 3a 20 6c 6f 63 61 6c 68 6f 73 74 3b 33 33 28 38 |: localhost:3348|
|000000b0| 36 0d 0a 61 63 63 65 70 74 3a 20 2a 2f 2a 0d 0a |6..accept: */*..|
|000000c0| 0d 0a                                           |..              |
+--------+-------------------------------------------------+----------------+ 
15:35:15.115 TRACE [id: 0x293801a8, L:/127.0.0.1:57141 - R:localhost/127.0.0.1:33486] FLUSH 
15:35:15.136 TRACE [id: 0x293801a8, L:/127.0.0.1:57141 - R:localhost/127.0.0.1:33486] READ: 122B

这实际上影响了我使用过的所有浏览器(Edge,Chrome和Firefox),它们都输出相同的活动,这让我相信这与Selenium升级本身及其附带的包有关,而不是专门与Edge有关。

到目前为止我所尝试的:

  • 从4.0.0-α-7到4.0.0-β-4的不同风味硒4似乎都有相同的结果。
  • 传入日志首选项时,无论我放入什么值,这些参数似乎都没有区别:
        // This is passing --silent in
        System.setProperty(EdgeDriverService.EDGE_DRIVER_SILENT_OUTPUT_PROPERTY, "true");
        System.setProperty(EdgeDriverService.EDGE_DRIVER_VERBOSE_LOG_PROPERTY, "false");

        var loggingPrefs = new LoggingPreferences();
        loggingPrefs.enable(LogType.PERFORMANCE, Level.WARNING);
        loggingPrefs.enable(LogType.BROWSER, Level.WARNING);
        loggingPrefs.enable(LogType.CLIENT, Level.WARNING);
        loggingPrefs.enable(LogType.DRIVER, Level.WARNING);
        loggingPrefs.enable(LogType.SERVER, Level.WARNING);

        var options = new EdgeOptions();
        options.setCapability(CapabilityType.LOGGING_PREFS, loggingPrefs);
        options.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
        options.setCapability(CapabilityType.ACCEPT_INSECURE_CERTS, true);

        var service = EdgeDriverService.createDefaultService();

        if (headless) {
            options.addArguments("--headless");
        }

        driver = new EdgeDriver(service, options);
    null
    <logger name="org.seleniumhq.selenium" level="OFF" />
    <logger name="org.openqa.selenium" level="OFF" />
    null
  <logger name="org.openqa.selenium" level="OFF" />

    <root level="WARN">
        <appender-ref ref="stdout" />
    </root>

由于这是一个特别的日志记录问题(其他一切都不工作),我觉得我缺少了一个明显的记录器或Selenium4中包含的项目,我只需要关闭它,但我无法确定它是哪个记录器--有人知道我可以在哪里找到这些信息或我需要取消哪个记录器吗?我的猜测是它与适当的浏览器驱动程序(例如EdgeDriver)或WebDriver有关,但我认为这些应该通过关闭org.openqa.selenium来获得。

共有1个答案

计阳泽
2023-03-14

我自己发现了这个问题的答案,所以在很少有人经历这个问题的情况下,发帖作为答案。我还包括了我是如何解决这个问题的,以防将来其他软件包可能会这样做。

因此,为了解决这个问题,我必须找出日志来自哪里,因此我将以下内容添加到logback-test.xml文件中(在本项目中我使用slf4j/log4j作为参考),并将其作为参考点:

    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%logger %d{HH:mm:ss.SSS} %p %m %ex%n</pattern>
        </encoder>
    </appender>

最后,在再次运行测试并重新检查日志后,将以下包标记为负责:

    null
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %p %m %ex%n</pattern>
        </encoder>
    </appender>
    
    <!-- Restrict logging for browser-level -->
    <logger name="io.netty" level="WARN" />
    <logger name="org.asynchttpclient.netty" level="WARN" />

    <root level="TRACE">
        <appender-ref ref="stdout" />
    </root>
</configuration>

这样做之后,日志就不再像我上面遇到的那样用跟踪级别的浏览器请求日志填充了。我不确定它们是否是Selenium4包的一部分,或者是否是与升级冲突的特定项目的其他部分,但无论如何,这已经将日志恢复到升级前的状态。

注意:根级别默认为trace,因为当出现基于测试的失败时,为了诊断目的,我在整个项目中都有跟踪级别的日志记录。

 类似资料:
  • 问题内容: 我最近继承了一些用Python 2.7编写的Selenium Webdriver代码。它正在Ubuntu上将大量数据记录到/ tmp- 太多了,这已经成为一个问题。我正在尝试将其关闭(或至少关闭)。 我一直在尝试进行RTFM,但这是Selenium(2.19.0)的新版本,手册尚未编写! 我可以看到有一个叫做的方法,听起来很有希望,但是要实现它,我需要实例化一个对象。否则,我不必实例化

  • 问题内容: 这是一个第三方应用程序,在我们的应用程序服务器上生成大量的登录信息。像这样: 如何关闭slf4j的输出?我已经在.war文件中查找了slf4j的一些配置,但没有找到任何配置。他们的网站也没有帮助 问题答案: slf4j只是实际日志后端(此处是覆盖jakarta commons日志记录)的一个漏斗,这是您必须配置的摆脱某种消息的程序。对于登录,这是适当的配置代码段: 对于log4j,它非

  • 我有一个要求,因为我需要在Mulesoft Flow中关闭日志记录。我需要在记录器级别,如果可能的话,在Http连接器级别。尝试将INFO更改为关闭log4j2.xml文件,但没有运气。我需要更新log4j2.xml文件中的哪些参数才能使其工作。现在我已经做了异步记录器。 提前感谢

  • 问题内容: 我使用AWS EC2指南安装了Spark,并且可以使用脚本正常启动该程序以获取Spark提示,并且还可以成功执行快速入门Quide。 但是,我无法终生解决如何在每个命令后停止所有冗长的日志记录。 我在下面的代码(注释掉,设置为OFF)中的几乎所有可能的情况下都尝试了该文件夹,该文件夹位于我从中以及在每个节点上启动应用程序的文件夹中,没有任何反应。执行每个语句后,我仍然可以打印日志记录语

  • 问题内容: 我在独立应用程序中使用Apache Common Logging库。在网上搜索后,我尝试通过使用以下方式关闭日志记录 但是,我仍然可以看到正在打印的日志消息。我可以知道我错过了什么吗? 我可以通过以下方式关闭日志记录 在commons-logging.properties中。 但是,在开发期间,我的Netbeans不知道从何处获取commons-logging.properties,有

  • 在我的应用程序中,石英作业是在应用程序部署后立即安排的。我有两个日志文件和,都用于特定的日志记录。搜索日志文件只是记录访问者的IP,其余所有日志记录(异常、调试信息)都记录在应用程序日志文件中。 我面临的问题是,默认的Quartz语句正在登录到文件中,这不是必需的。 如何禁用该日志记录?将级别设置为OFF不起作用。我也遵循了禁用石英日志记录,但这也没有帮助。 下面是我的log4j.properti