Dav*_*e H 2 java selenium-webdriver selenium-edgedriver selenium4
我正在开发一个 Java (11) 项目,我们需要使用 Edge-Chromium(通过 docker 容器在 Linux 上运行)进行一些测试,因此我必须将我们使用的 Selenium 版本升级到 4.0 .0-beta-4。
我已经设法让这一点工作,但是在升级时,似乎当我现在运行任何类型的测试(本地或通过容器)时,日志中都会充满 GET/POST 请求,就好像浏览器本身正在输出其所有内容一样跟踪级别的活动,包括看起来像访问页面的内存转储的内容(下面的示例,想象一下这个 x 500,这就是日志看起来完全难以辨认的样子):
+-------------------------------------------------+
| 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
Run Code Online (Sandbox Code Playgroud)
这实际上影响了我使用过的所有浏览器(Edge、Chrome 和 Firefox),它们都输出相同的活动,这让我相信这与 Selenium 升级本身及其附带的软件包有关,而不是专门与 Edge 有关。
到目前为止我尝试过的:
// 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);
Run Code Online (Sandbox Code Playgroud)
<logger name="org.seleniumhq.selenium" level="OFF" />
Run Code Online (Sandbox Code Playgroud)
<logger name="org.openqa.selenium" level="OFF" />
Run Code Online (Sandbox Code Playgroud)
唯一给我带来成功的事情是在 logback-test.xml 中设置以下内容,但它禁用了项目中添加的所有跟踪日志记录,这并不理想:
<logger name="org.openqa.selenium" level="OFF" />
<root level="WARN">
<appender-ref ref="stdout" />
</root>
Run Code Online (Sandbox Code Playgroud)
由于这具体是一个日志记录问题(其他一切都正常),我觉得我缺少一个明显的记录器或 Selenium 4 中包含的项目,我只需要关闭它,但我无法找出哪个记录器是的 -有人知道我可以在哪里找到此信息或我需要抑制哪个记录器吗? 我的猜测是它与适当的浏览器驱动程序(例如 EdgeDriver)或 WebDriver 有关,但我认为这些应该通过关闭 org.openqa.selenium 来获取。
Dav*_*e H 10
我自己发现了这个问题的答案,因此在极少数情况下其他人遇到这个问题时将其作为答案发布。我还包括了我的解决方法,以防将来其他软件包可能这样做。
因此,为了解决这个问题,我必须弄清楚日志来自哪里,因此我将以下内容添加到我的 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>
Run Code Online (Sandbox Code Playgroud)
再次运行测试并重新检查日志后,最终将以下包标记为负责:
因此,我将以下内容添加到我的 logback-test.xml 文件中(包含完整的 xml 以供参考):
<?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>
Run Code Online (Sandbox Code Playgroud)
执行此操作后,日志不再像我上面遇到的那样充满跟踪级别的浏览器请求日志。我不确定它们是否是 Selenium 4 包的一部分,或者是否是我的特定项目的其他部分与升级冲突,但这无论如何都将日志记录恢复到升级之前的状态。
注意:根级别默认为跟踪,因为当出现基于测试的故障时,我在整个项目中进行跟踪级别日志记录以用于诊断目的。