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?
Jawaban:
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:
Output Konsol:
Jika Anda menggunakan Chrome v81 , menggunakan ChromeDriver 81.0.4044.20 yang baru dirilis memecahkan masalah.
Solusi permanen
Namun,
@bugdroid
mengajukan perbaikan aktual melalui revisi / komit ini yaitu sebagai berikut:Catatan :
Sejarah
Pesan kesalahan ini ...
... 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::HandleEventsUntil
untuk memungkinkan pemeriksaan tambahan status navigasi. Tapi, sayangnya ketika batas waktu ini kedaluwarsa, ini dicatat sebagai SEVERE (olehProcessNextMessage
). Dalam kasus timeout kecil ini, seharusnya tidak login sebagai SEVERE , meskipun timeout dariSendCommandInternal
masih 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 :
yang terdengar seperti ... solusi yang aman ... dan telah dikonfirmasi oleh anggota tim Chromium .
Blok Kode:
Output Konsol:
tl; dr
Anda dapat menemukan beberapa diskusi yang relevan di:
sumber
vstest.console.exe
karena$?
variabel PowerShell adalah$false
meskipun tes lulus. PowerShell tampaknya berpikir apa pun yang ditulis untuk stderror adalah kegagalan, meskipun$LastExitCode
untuk pelari uji kembali nol.Penyebab root: Setiap kali Anda memuat beberapa halaman dengan bantuan driver selenium, maka
driver
skrip tunggu hingga halaman benar-benar dimuat. Tetapi kadang-kadang webdriver membutuhkan lebih banyak waktu untuk memuat halaman, dalam hal ini Anda akan melihatTimeoutException
pengecualian 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
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.
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)
Output Konsol:
Dengan Strategi PageLoad - Eager:
Cuplikan Kode:
Output Konsol:
sumber