レンダラーからのメッセージの受信がタイムアウトしました:Selenium Javaを介してChromeDriverおよびChrome v80を使用した0.100ログメッセージ


39

最近、テスト環境を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に変更はありましたか?手がかりはありますか?


7
私も同じ問題に直面しています:(
Sooraj

6
v80にアップグレードすると、同じ問題が発生します。ただし、他の誰かが同じ問題に直面しているかどうかを尋ねるのではなく、あなたの質問はおそらくそれを修正する方法を尋ねるべきです。
タプラー

2
この質問は締め切られたとは思えません。多くの場合、SOは役立つエンジンとして失敗します。
Saeed Neamati

4
まったく同じ問題に直面しています。自動化されたSeleniumコードはすべて壊れています。そして、多くの複雑さのためにダウングレードすることはできません。
Saeed Neamati

2
@DebanjanBはい、私はあなたの投稿を通過しました。彼らが次のリリースで修正できることを願っています。私は解決策を見つけようとしたので、それについて述べましたが、タイムアウトを防ぐためのオプションが他にもあります。他のオプションで試してみますが、タイムアウト期間が非常に短い場合は、次のリリースまで待つ必要があると思います。
ムザミール

回答:


24

暫定ソリューション

以下は、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
      
  • 使用している場合はクロームV81を最近リリースされた使用して、ChromeDriver 81.0.4044.20を問題を解決します。

  • DevまたはCanaryチャネルのChromeを使用している場合は、プラットフォーム固有のバイナリを取得する必要があります。

永続的なソリューション

ただし、次のように@bugdroid、このリビジョン / コミットを通じて実際の修正を送信しました。

再試行ループタイムアウトの[ChromeDriver]抑制ロギングr1924789は、デベロッパーツールのメッセージを待っている間に再試行ループを追加しました。これは、情報のないタイムアウトレポートを含むユーザーのログをスパムしました。このCLはそれらのログメッセージを抑制し、適切な場合にコマンドのタイムアウト値を正しく報告します。

  • ステータス:修正済み
  • ラベル:ToBeReleased ChromeDriver-82

歴史

このエラーメッセージ...

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

...必ずしも失敗を示すものではありません。

@Triciaが言及しているように、ChromeDriverバージョン80は待機ループを変更して、より多くの再試行を許可しました。このループはそのメッセージを生成しますが、リッスンし続けます。ただし、そのメッセージのSEVEREタグは誤解を招く可能性があります。

さらに、ディスカッションに発行3332:再試行タイムアウトが厳しいとして記録@triciac [ChromeDriverコミッタ]もChromeDriverチームが小さなタイムアウト時間(100ミリ秒)を加え、ことを添加DevToolsClientImpl::HandleEventsUntilナビゲーションステータスの追加のチェックを有効にします。しかし、残念ながら、このタイムアウトが期限切れになると、SEVEREとして(によって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; dr

あなたはいくつかの関連する議論を見つけることができます:


1
また、このログメッセージはstderrorに書き込まれたように見えることに注意してください。vstest.console.exePowerShell $?変数が$falseテストに合格したにもかかわらず、を使用してテストを実行した後、PowerShellスクリプトが失敗し始めました。PowerShellは$LastExitCode、テストランナーのがゼロを返したとしても、stderrorに書き込まれているものはすべて失敗であると考えているようです。
Greg Burghardt

4
再:Chrome v80、最近リリースされたChromeDriver 80.0.3987.106を使用して問題を解決します。再:Chrome v81、最近リリースされたChromeDriver 81.0.4044.20を使用して問題を解決します。ChromeDirverのアップデートでまだ問題が発生しています。
ニール

1
はい!!!!! ChromeDriver v79 win32はChrome v80.0.3987.132で正常に動作し、コンソールでTimedOutエラーを出しません。ただし、Chromedriverがサーバーを起動できないことがあります。
Surodip

1
chromedriver v79の回避策を使用すると、最新バージョンの安定したchrome(81.0.4044.92)で動作しなくなり、ドライバがchromeを開くことさえできなくなります。chromedriverを最新にアップグレードして動作しましたが、重大なタイムアウトエラーが返されました。
PST

@PST-まったく同じ問題。これはイライラさせられます。
スリラムイランゴ

10

根本的な原因:セレンドライバーの助けを借りてページを読み込むときは常にdriver、ページが完全に読み込まれるまでスクリプトが待機します。ただし、ウェブドライバがページをロードするのに時間がかかる場合がTimeoutExceptionあります。その場合、コンソールに例外が表示されます。

解決策:ページの読み込みに時間がかかりすぎて、追加のサブリソース(画像、CSS、 JS など)のダウンロードを停止する必要がある場合は、Webドライバーを使用してpageLoadStrategyを変更できます。

以下のコードは、ページからHTMLコンテンツをロードするだけです。chromeoptionsからページ読み込み戦略を設定できます

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

更新されたソリューション-2:私はDebanjanBに同意します。Noneを使用したPageLoad戦略に同意します。テストを実行している間、追加のファイル(イメージ、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");

それらのどれも役に立ちませんでしたが、ページのロード戦略を使用してもう一度1つの解決策を見つけました。今回はすべてのサブリソースをダウンロードしていますが、DOMContentLoadedイベントを待機してます。この戦略はEagerと呼ばれます。利用可能な3つのページロード戦略すべての小さな定義

1.通常: この戦略により、Seleniumはページ全体のロード(HTMLコンテンツとサブリソースのダウンロードと解析)を待機します。

2. eager: この戦略により、SeleniumはDOMContentLoadedイベントを待機します(htmlコンテンツがダウンロードおよび解析された場合のみ)。

3. none: この方法では、最初のページコンテンツが完全に受信された(htmlコンテンツがダウンロードされた)直後にSeleniumが戻ります。

注:デフォルトでは、Seleniumがページをロードすると、通常のpageLoadStrategyに従います。

Pageload戦略を使用しないコードスニペット(またはデフォルトでセレンによって使用される通常)

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();

コンソール出力:

ポート41540でChromeDriver 80.0.3987.16(320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-heads / 3987 @ {#185})を起動していますローカル接続のみが許可されています 悪意のあるコードによるアクセスを防ぐために、ChromeDriverと関連するテストフレームワークが使用するポートを保護してください。2020年2月11日10:22:12 AM org.openqa.selenium.remote.ProtocolHandshake createSession INFO:Detectedダイアレクト:W3C [1581412933.937] [SEVERE]:レンダラーからのメッセージ受信のタイムアウト:0.100 [1581412934.066] [SEVERE]:タイムアウトレンダラーからのメッセージの受信:0.100 [1581412934.168] [重大]:レンダラーからの受信メッセージのタイムアウト:0.100 [1581412934.360] [重大]:レンダラーからの受信メッセージのタイムアウト:0.100 [1581412934.461] [重大]:レンダラーからの受信メッセージのタイムアウト: 0.100 [1581412934.618] [重大]:

PageLoad Strategy-Eagerを使用:

コードスニペット:

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();

コンソール出力:

ポート1175でChromeDriver 80.0.3987.16(320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-heads / 3987 @ {#185})を起動していますローカル接続のみが許可されています 悪意のあるコードによるアクセスを防ぐために、ChromeDriverと関連するテストフレームワークが使用するポートを保護してください。2020年2月11日10:29:05 org.openqa.selenium.remote.ProtocolHandshake createSession INFO:検出された方言:W3C
21


WebDriverの構成は標準化されており、必要なテスト戦略に最適であるため、一般にPageLoad戦略を調整することはできません。しかし、議論にセレンは、全ページのロードまで待たないようにする方法ロードするためにページを待たないで、我々は詳細でそれを議論してきました。ChromeDriver v80の問題です。
DebanjanB

2
@DebanjanB私はあなたに同意しますが、ご存じのとおり、SOは問題を解決しようとしているコミュニティです。私は可能な限り最善の解決策を試しました。Chromeドライバーの問題またはバグであることがわかっている場合は、この問題をGitプロジェクトまたは推奨される場所に記録する必要があります。SOで質問を上げることは役に立ちません。
ムザミル

最近、chromeとchromedriverを更新し、これらすべての警告メッセージを受け取り始めました。今、私は私のクロムをダウングレードしようとしています、そして、クロム79vを入手する場所を見つけることができません。誰かがchrome 79vをダウンロードするためのリンクを私に提供できますか
Vin

ここ@Vinあなたがダウンロードすることができchromedriver.chromium.org/downloads
Muzzamil
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.