首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Selenium 4中的off驱动程序中关闭浏览器日志记录

从Selenium 4中的off驱动程序中关闭浏览器日志记录
EN

Stack Overflow用户
提问于 2021-08-24 15:17:09
回答 1查看 1.4K关注 0票数 1

我正在开发一个Java (11)项目,在这个项目中,我们需要使用边缘-铬(它通过一个坞容器在Linux上运行)进行一些测试,所以我不得不将我们使用的Selenium版本升级到4.0.0-beta-4。

不过,在升级时,我设法使这一点发挥作用,但当我现在运行任何类型的测试(本地测试或通过容器)时,日志中都充满了GET/POST请求,就好像浏览器本身正在输出其所有跟踪级别的活动,包括所访问页面的内存转储(例如,下面的例子,想象一下这x 500,这就是日志看起来非常难以辨认的地方):

代码语言:javascript
复制
         +-------------------------------------------------+
         |  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,从4.0.0-α-7到4.0.0-β-4,似乎都有相同的结果。
  • 通过输入日志首选项,不管我输入了什么值,这些选项似乎都没有什么区别:
代码语言:javascript
复制
        // 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);
  • 为logback-test.xml添加行以不报告selenium的任何日志记录:
代码语言:javascript
复制
    <logger name="org.seleniumhq.selenium" level="OFF" />
代码语言:javascript
复制
    <logger name="org.openqa.selenium" level="OFF" />
  • 这些步骤概述了这里,尽管这个问题似乎与我正在经历的问题略有不同。

唯一让我成功的地方是在logback-test.xml中设置以下内容,但它禁用了项目中添加的所有跟踪日志记录,这并不理想:

代码语言:javascript
复制
  <logger name="org.openqa.selenium" level="OFF" />

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

由于这是一个具体的日志记录问题(其他一切都在正常工作),我觉得我好像遗漏了一个明显的记录器或Selenium 4中包含的项目,我只需要关闭它,但我还无法确定它是哪个记录器--任何人都知道我在哪里可以找到这些信息,或者我需要禁止哪个记录器?,我猜想它是与适当的浏览器驱动程序(例如EdgeDriver)或WebDriver有关,但我认为应该通过关闭org.openqa.selenium来获取这些日志。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-25 16:25:12

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

因此,为了解决这个问题,我必须确定日志来自何处,所以我将以下内容添加到logback-test.xml文件中(在这个项目中我使用Slf4j/Log4j作为参考),使用作为参考点:

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

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

  • io.netty
  • org.asynchttpclient.netty

因此,我在logback-test.xml文件中添加了以下内容(包括完整的xml以供参考):

代码语言:javascript
复制
<?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>

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

注意:当发生基于测试的故障时,根级别默认为跟踪,因为我在整个项目中都有跟踪级别日志记录,用于诊断目的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68909898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档