selenium - 超时接收来自渲染器的消息 : 0. 100 通过 Selenium Java 使用 ChromeDriver 和 Chrome v80 的日志消息

标签 selenium google-chrome selenium-chromedriver chromium renderer

我们最近使用 ChromeDriver v80.0.3987.16 和 Chrome v80.0.3987.87(官方构建)(64 位)升级了我们的测试环境,升级后即使是最小的程序也会产生大量这些严重的日志:

[1581082019.282][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.245][SEVERE]: Timed out receiving message from renderer: 0.100

早些时候,这些消息偶尔会被观察到,直到使用 ChromeDriver v79.0/Chrome v79.0 组合。

最小代码块:
public class chromeDemo 
{
    public static void main(String[] args) 
    {
            System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
            WebDriver driver =  new ChromeDriver();
            driver.get("https://www.google.com/");
            driver.quit();
    }
}

控制台输出:
Starting ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs/branch-heads/3987@{#185}) on port 9194
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
Feb 07, 2020 6:56:57 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
[1581082019.282][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.245][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.430][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.531][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.632][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.734][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.835][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.364][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.544][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.647][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.748][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.850][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.952][SEVERE]: Timed out receiving message from renderer: 0.100

有人面临同样的情况吗?
ChromeDriver/Chrome v80 相对于 ChromeDriver/Chrome v79 是否有任何变化?有什么线索吗?

最佳答案

临时解决方案

以下是针对不同版本的 Chrome 用户的解决方案。

  • 如果您使用的是 Chrome v80,请使用最近发布的 ChromeDriver 80.0.3987.106解决了这个问题。
  • 代码块:
    System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
    WebDriver driver =  new ChromeDriver();
    driver.quit();
    
  • 控制台输出:
    Starting ChromeDriver 80.0.3987.106 (f68069574609230cf9b635cd784cfb1bf81bb53a-refs/branch-heads/3987@{#882}) on port 20041
    Only local connections are allowed.
    Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
    Feb 14, 2020 9:50:57 PM org.openqa.selenium.remote.ProtocolHandshake createSession
    INFO: Detected dialect: W3C
    
  • 如果您使用的是 Chrome v81,请使用最近发布的 ChromeDriver 81.0.4044.20解决了这个问题。
  • 如果您使用来自 Dev or Canary 的 Chrome您需要获取平台特定二进制文件的 channel :
  • Linux (64-bit)
  • Mac OS X (64-bit)
  • Windows (32-bit)


  • 永久解决方案

    但是,@bugdroid通过此 revision 提交了实际修复/commit如下:

    [ChromeDriver] suppress logging of retry loop timeout: r1924789 added a retry loop while waiting for DevTools messages. This spammed users' logs with uninformative timeout reports. This CL suppresses those log messages and correctly reports the command timeout value when appropriate.



    备注 :

    • Status: Fixed
    • Labels: ToBeReleased ChromeDriver-82


    历史

    此错误消息...
    [1581082020.245][SEVERE]: Timed out receiving message from renderer: 0.100
    

    ...不一定表示失败。

    作为@Tricia mentions即,ChromeDriver 版本 80 修改了等待循环以允许更多重试;此循环将生成该消息,但它会继续监听。但是,该消息的 SEVERE 标记具有误导性。

    此外,在讨论 Issue 3332: Retry timeout logged as severe , @triciac [ChromeDriver Committer] 还补充说,ChromeDriver 团队在 DevToolsClientImpl::HandleEventsUntil 中添加了一个小超时(100 毫秒)。启用对导航状态的额外检查。但是,不幸的是,当这个超时到期时,它被记录为严重(由 ProcessNextMessage )。在这个小超时的情况下,它不应该记录为 SEVERE,尽管超时来自 SendCommandInternal还是应该的。

    因此 ChromeDriver 需要一种更好的方式来控制日志记录,可能是通过增加超时时间。但是,如果命令最终超时,列出的超时时间非常小,则需要列出用户定义的超时时间。

    立即解决

    作为临时解决方案,您可以降级到 ChromeDriver v79.0.3945.36似乎 SEVERE 日志没有显示在控制台中,但您会观察到警告:
    [WARNING]: This version of ChromeDriver has not been tested with Chrome version 80
    

    这听起来像是一个......安全的解决方法......并且已经被 Chromium 团队成员确认。

    chromedriver79
  • 代码块:
    public class A_Chrome 
    {
        public static void main(String[] args) 
        {
            System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
            WebDriver driver =  new ChromeDriver();
            driver.get("https://www.google.com/");
            driver.quit();
        }
    }
    
  • 控制台输出:
    Starting ChromeDriver 79.0.3945.36 (3582db32b33893869b8c1339e8f4d9ed1816f143-refs/branch-heads/3945@{#614}) on port 9200
    Only local connections are allowed.
    Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
    [1581503845.444][WARNING]: This version of ChromeDriver has not been tested with Chrome version 80.
    Feb 12, 2020 4:07:26 PM org.openqa.selenium.remote.ProtocolHandshake createSession
    INFO: Detected dialect: W3C
    


  • tl;博士

    您可以在以下位置找到一些相关的讨论:
  • Issue 3333: ChromeDriver may block indefinitely while waiting for pending navigation after net::ERR_CONTENT_DECODING_FAILED
  • Issue 3336: WebDriver 80.0.3987.16 can't open Chrome on Linux
  • 关于selenium - 超时接收来自渲染器的消息 : 0. 100 通过 Selenium Java 使用 ChromeDriver 和 Chrome v80 的日志消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60114639/

    相关文章:

    javascript - 在 Rails 中用于 Javascript 测试的 Selenium 或 Watir

    css - 透明的 css 在 chrome 中不起作用

    java - Chrome 用于测试无法在 Docker 容器中启动

    Selenium如何按类选择对象

    java - 如何在最新的 Chrome 驱动程序版本 : 2. 40 中启用 Headless Chrome 中的下载文件

    javascript - Chrome 打包应用程序 UDP 套接字无法正常工作

    Javascript 浏览器识别

    centos - 未知错误 : Chrome failed to start: exited abnormally (Driver info: chromedriver=2. 34.522913

    javascript - 来自先前 Capybara js 规范的 XHR 请求在下一个规范中出现(并失败)

    selenium - 如何使用 Selenium 单击 Onclick Javascript 表单?