Habis menerima pesan dari renderer: 0.100 pesan log menggunakan ChromeDriver dan Chrome v80 melalui Selenium Java

39

Kami baru-baru ini meningkatkan lingkungan pengujian kami dengan ChromeDriver v80.0.3987.16 dan Chrome v80.0.3987.87 (Pembuatan Resmi) (64-bit) dan setelah peningkatan bahkan program minimal menghasilkan banyak log SEVERE ini:

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

Sebelumnya pesan-pesan ini diamati sesekali sampai dengan combo ChromeDriver v79.0 / Chrome v79.0.

Blok Kode Minimal:

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

Output Konsol:

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

Adakah yang menghadapi hal yang sama? Apakah ada perubahan di ChromeDriver / Chrome v80 sehubungan dengan ChromeDriver / Chrome v79? Ada petunjuk?

DebanjanB
sumber
7
Saya juga menghadapi masalah yang sama :(
Sooraj
6
Saya mendapatkan masalah yang sama setelah kami memutakhirkan ke v80. Padahal, pertanyaan Anda mungkin harus bertanya bagaimana cara memperbaikinya, daripada menanyakan apakah ada orang lain yang menghadapi masalah yang sama.
Taplar
2
Saya tidak percaya pertanyaan ini telah ditutup. Berkali-kali SO gagal karena mesin membantu.
Saeed Neamati
4
Menghadapi masalah yang persis sama. Semua kode Selenium otomatis kami rusak. Dan kita tidak bisa menurunkan peringkat karena banyak kerumitan.
Saeed Neamati
2
@ DebanjanB Ya saya sudah membaca posting Anda. Saya harap mereka bisa memperbaikinya di rilis berikutnya. Saya mencoba mencari solusinya jadi saya telah menyebutkannya tetapi ada lebih banyak pilihan untuk mencegah batas waktu. Saya akan mencobanya dengan opsi lain tetapi jika durasi timeout sangat kurang maka saya pikir kita perlu menunggu rilis berikutnya.
Muzzamil

Jawaban:

24

Solusi sementara

Berikut adalah solusi untuk berbagai varian pengguna Chrome .

  • Jika Anda menggunakan Chrome v80 , menggunakan ChromeDriver 80.0.3987.106 yang baru saja dirilis memecahkan masalah.

    • Blok Kode:

      System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
      WebDriver driver =  new ChromeDriver();
      driver.quit();
      
    • Output Konsol:

      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
      
  • Jika Anda menggunakan Chrome v81 , menggunakan ChromeDriver 81.0.4044.20 yang baru dirilis memecahkan masalah.

  • Jika Anda menggunakan Chrome dari saluran Dev atau Canary, Anda perlu mengambil binari khusus platform:

Solusi permanen

Namun, @bugdroidmengajukan perbaikan aktual melalui revisi / komit ini yaitu sebagai berikut:

[ChromeDriver] menekan penebangan batas coba ulang loop : r1924789 menambahkan loop coba lagi sambil menunggu pesan DevTools. Ini mengecam log pengguna dengan laporan batas waktu yang tidak informatif. CL ini menekan pesan log tersebut dan melaporkan dengan benar nilai batas waktu perintah bila perlu.

Catatan :

  • Status: Tetap
  • Label: ToBeReleased ChromeDriver-82

Sejarah

Pesan kesalahan ini ...

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

... tidak selalu menunjukkan kegagalan.

Ketika @Tricia menyebutkan itu, ChromeDriver Versi 80 memodifikasi loop menunggu untuk memungkinkan lebih banyak percobaan; loop ini akan menghasilkan pesan itu, tetapi terus mendengarkan. Namun tag SEVERE untuk pesan itu menyesatkan.

Lebih lanjut, dalam diskusi Edisi 3332: Coba lagi batas waktu yang dicatat sebagai parah , @triciac [ChromeDriver Committer] juga menambahkan bahwa, tim ChromeDriver menambahkan batas waktu kecil (100 ms) DevToolsClientImpl::HandleEventsUntiluntuk memungkinkan pemeriksaan tambahan status navigasi. Tapi, sayangnya ketika batas waktu ini kedaluwarsa, ini dicatat sebagai SEVERE (oleh ProcessNextMessage). Dalam kasus timeout kecil ini, seharusnya tidak login sebagai SEVERE , meskipun timeout dari SendCommandInternalmasih seharusnya.

Jadi ChromeDriver membutuhkan cara untuk mengontrol pencatatan dengan cara yang lebih baik, mungkin dengan menambah batas waktu. Namun, jika perintah akhirnya habis, durasi batas waktu yang tercantum sangat kecil, maka diperlukan daftar batas waktu yang ditentukan pengguna sebagai gantinya.


Solusi segera

Sebagai solusi sementara, Anda dapat downgrade ke ChromeDriver v79.0.3945.36 karena tampaknya PARAH log tidak muncul di konsol tetapi Anda akan mengamati PERINGATAN :

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

yang terdengar seperti ... solusi yang aman ... dan telah dikonfirmasi oleh anggota tim Chromium .

chromedriver79

  • Blok Kode:

    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();
        }
    }
    
  • Output Konsol:

    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

Anda dapat menemukan beberapa diskusi yang relevan di:

DebanjanB
sumber
1
Perlu diketahui juga bahwa pesan log ini tampaknya ditulis ke stderror. Saya memiliki skrip PowerShell mulai gagal setelah menjalankan tes menggunakan vstest.console.exekarena $?variabel PowerShell adalah $falsemeskipun tes lulus. PowerShell tampaknya berpikir apa pun yang ditulis untuk stderror adalah kegagalan, meskipun $LastExitCodeuntuk pelari uji kembali nol.
Greg Burghardt
4
Re: Chrome v80, menggunakan ChromeDriver 80.0.3987.106 yang baru dirilis memecahkan masalah. Re: Chrome v81, menggunakan ChromeDriver 81.0.4044.20 yang baru dirilis memecahkan masalah. Saya masih melihat masalah dengan pembaruan ChromeDirver.
Neil
1
Ya !!!!! ChromeDriver v79 win32 bekerja dengan baik dengan chrome v80.0.3987.132 dan tidak memberikan kesalahan TimedOut di konsol. Namun terkadang Chromedriver gagal memulai server.
Surodip
1
Menggunakan solusi chromedriver v79 tidak lagi berfungsi dengan versi terbaru chrome stabil (81.0.4044.92) dengan driver yang bahkan tidak dapat membuka chrome. Saya memutakhirkan chromedriver ke yang terbaru dan berfungsi, tetapi kesalahan batas waktu yang parah telah kembali.
PST
@ PST - masalah yang sama persis. ini membuat frustrasi.
Sriram Ilango
10

Penyebab root: Setiap kali Anda memuat beberapa halaman dengan bantuan driver selenium, maka driverskrip tunggu hingga halaman benar-benar dimuat. Tetapi kadang-kadang webdriver membutuhkan lebih banyak waktu untuk memuat halaman, dalam hal ini Anda akan melihat TimeoutExceptionpengecualian di konsol Anda.

Solusi: Ketika Pemuatan Halaman terlalu banyak waktu dan Anda perlu berhenti mengunduh sub-sumber daya tambahan (gambar, css, js dll), Anda dapat mengubah halamanLoadStrategy melalui webdriver.

Kode di bawah ini hanya memuat konten html dari halaman. Anda dapat mengatur strategi pemuatan halaman dari opsi chrome

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

Solusi Terbaru -2: Saya setuju dengan DebanjanB, strategi PageLoad with None, tanpa mengunduh file tambahan (gambar, css, js dll) bukan ide yang baik saat melakukan pengujian. Saya memang mencari semua masalah tentang hal itu dan mencoba menemukan solusi yang valid. Saya mencoba opsi di bawah karena kadang-kadang di suatu tempat ia dapat menyelesaikan masalah ini.

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

Tidak ada dari mereka yang membantu. Tetapi saya menemukan satu solusi lagi dengan strategi memuat halaman. Kali ini kami mengunduh semua sub-sumber tetapi kami menunggu acara DOMContentLoaded . Strategi ini disebut Eager . Definisi kecil dari semua strategi 3 halaman memuat

1. normal: Strategi ini menyebabkan Selenium menunggu pemuatan halaman penuh (konten html dan sub sumber daya diunduh dan diurai).

2. bersemangat: Strategi ini menyebabkan Selenium menunggu acara DOMContentLoaded (konten html hanya diunduh dan diurai saja).

3. tidak ada: Strategi ini menyebabkan Selenium kembali segera setelah konten halaman awal diterima sepenuhnya (konten html diunduh).

CATATAN: Secara default, ketika Selenium memuat halaman, ia mengikuti halaman normalLoadStrategy.

Cuplikan kode tanpa menggunakan strategi Pageload (Atau Normal seperti yang digunakan oleh selenium secara default)

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

Output Konsol:

Mulai ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-heads / 3987 @ {# 185}) pada port 41540 Hanya koneksi lokal yang diizinkan. Harap lindungi port yang digunakan oleh ChromeDriver dan kerangka kerja pengujian terkait untuk mencegah akses dengan kode jahat. 11 Feb 2020 10:22:12 AM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Dialek yang terdeteksi: W3C [1581412933.937] [SEVERE]: Habis menerima pesan dari renderer: 0,100 [1581412934.066] menerima pesan dari penyaji: 0.100 [1581412934.168] [BEVER]: Batas waktu menerima pesan dari penyaji: 0.100 [1581412934.360] [BEVERE]: Jangka waktu menerima pesan dari penyaji: 0.100 [1581412934.461] [SEVERE]: Habis menerima pesan dari penyaji: 0.100 [1581412934.618] [BEVERE]:

Dengan Strategi PageLoad - Eager:

Cuplikan Kode:

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

Output Konsol:

Mulai ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-heads / 3987 @ {# 185}) pada port 1175 Hanya koneksi lokal yang diizinkan. Harap lindungi port yang digunakan oleh ChromeDriver dan kerangka kerja pengujian terkait untuk mencegah akses dengan kode jahat. 11 Feb, 2020 10:29:05 AM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Deteksi yang terdeteksi: W3C
21

Muzzamil
sumber
Umumnya Anda tidak akan dapat mengubah Strategi PageLoad karena konfigurasi WebDriver distandarisasi dan paling sesuai dengan strategi pengujian yang diperlukan. Namun, dalam diskusi Cara membuat Selenium tidak menunggu hingga memuat halaman penuh , Jangan menunggu halaman dimuat, kami telah membahasnya secara rinci. Ini masalah dengan ChromeDriver v80.
DebanjanB
2
@ DebanjanB Saya setuju dengan Anda tetapi karena Anda tahu SO adalah komunitas yang akan menyelesaikan masalah. Saya mencoba solusi terbaik apa pun yang tersedia. Jika Anda tahu ini adalah MASALAH atau BUG dalam driver chrome maka kami harus mencatat masalah ini pada proyek Git mereka atau tempat yang disarankan. Mengajukan pertanyaan dalam SO tidak akan membantu.
Muzzamil
Saya baru saja memperbarui chrome dan chromedriver saya, dan kemudian mulai mendapatkan semua pesan peringatan ini. Sekarang saya mencoba untuk menurunkan versi chrome saya dan tidak dapat menemukan tempat untuk mendapatkan chrome 79v. Dapatkah seseorang memberi saya tautan untuk mengunduh chrome 79v
Vin
@Vin sini Anda dapat men-download chromedriver.chromium.org/downloads
Muzzamil