从渲染器接收消息时超时:通过Selenium Java使用ChromeDriver和Chrome v80记录0.100条消息

2024-04-25 14:03:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我们最近使用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 v79,ChromeDriver/Chrome v80是否有任何变化?有什么线索吗


Tags: from版本messageby官方测试环境driverpublic
3条回答

临时解决办法

以下是针对Chrome用户的不同变体的解决方案

  • 如果您使用的是chromev80,那么使用最近发布的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
      
  • 如果您使用的是chromev81,那么使用最近发布的ChromeDriver 81.0.4044.20解决了这个问题

  • 如果您使用的是来自Dev or Canary频道的Chrome,则需要获取特定于平台的二进制文件:

永久解决方案

但是,@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

…不一定表示失败

正如@Triciamentions所述,ChromeDriver版本80修改了等待循环以允许更多重试;此循环将生成该消息,但它将继续侦听。然而,该消息的严重标签具有误导性

此外,在讨论中,{a10},{a11}[ChromeDriver Committer]还补充说,ChromeDriver团队向{}添加了一个小的超时(100毫秒),以启用导航状态的额外检查。但是,不幸的是,当此超时过期时,它被记录为严重(由ProcessNextMessage)。在这个小超时的情况下,它不应该记录为严重,尽管从SendCommandInternal开始的超时仍然应该记录

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


即时解决方案

作为临时解决方案,您可以降级到ChromeDriver v79.0.3945.36,因为控制台中似乎没有显示严重日志,但您将观察到警告

[WARNING]: This version of ChromeDriver has not been tested with Chrome version 80

听起来像是一个安全的解决办法并已由团队成员确认

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;博士

您可以在以下内容中找到一些相关讨论:

使用这行代码保留代码优先语句

System.setProperty(ChromeDriverService.CHROME_DRIVER_SILENT_OUTPUT_PROPERTY, "true");

如果你不支持Leanthy

System.setProperty("webdriver.chrome.silentOutput", "true");

根本原因:每当您在selenium驱动程序的帮助下加载某个页面时,driver脚本将等待页面完全加载。但是有时候webdriver需要更多的时间来加载页面,在这种情况下,您将在控制台中看到TimeoutException异常

解决方案:当页面加载花费太多时间并且需要停止下载其他子资源(图像、CSS、js等)时,可以通过webdriver更改页面加载策略

下面的代码只是从页面加载html内容。您可以从chromeoptions

ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.NONE);

更新的解决方案-2:我同意DebanjanB,在执行测试时,不下载其他文件(图像、CSS、js等)的无页面加载策略不是一个好主意。我搜索了所有关于它的问题,并试图找到一个有效的解决方案。我尝试了以下选项,因为有时它能够解决这个问题

    options.addArguments("start-maximized"); 
    options.addArguments("enable-automation"); 
    options.addArguments("--no-sandbox"); 
    options.addArguments("--disable-infobars"); 
    options.addArguments("--disable-dev-shm-usage"); 
    options.addArguments("--disable-browser-side-navigation"); 
    options.addArguments("--disable-gpu");

他们都没有帮助,但我找到了一个解决方案再次与页面加载策略。这次我们正在下载所有子资源,但我们正在等待DOMContentLoaded事件。这种策略称为“渴望”。所有3种页面加载策略的小定义

1。正常: 此策略导致Selenium等待整个页面加载(下载并解析HTML内容和子资源)

2。渴望: 此策略导致Selenium等待DOMContentLoaded事件(仅下载和解析HTML内容)

3。无: 此策略使Selenium在初始页面内容之后立即返回 已完全接收(HTML内容已下载)

注意:默认情况下,当Selenium加载页面时,它遵循正常的页面加载策略

不使用页面加载策略的代码段(或默认情况下由selenium使用的正常代码段)

System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");   
WebDriver driver=new ChromeDriver();
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();

控制台输出:

Starting ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs/branch-heads/3987@{#185}) on port 41540 Only local connections are allowed. Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code. Feb 11, 2020 10:22:12 AM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C [1581412933.937][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412934.066][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412934.168][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412934.360][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412934.461][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412934.618][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412934.719][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412934.820][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412934.922][SEVERE]: Timed out receiving message from renderer: 0.100 [1581412935.097][SEVERE]: Timed out receiving message from renderer: 0.100 21

使用页面加载策略-急切:

代码片段:

System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver=new ChromeDriver(options);
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();

控制台输出:

Starting ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs/branch-heads/3987@{#185}) on port 1175 Only local connections are allowed. Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code. Feb 11, 2020 10:29:05 AM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C
21

相关问题 更多 >