Rumah >pembangunan bahagian belakang >C++ >Mengapa WebDriverWait Saya Gagal Menunggu Apabila Berjalan Tanpa Titik Putus?
WebDriverWait Not Waiting Not Waiting as Expected
Apabila cuba mendapatkan semula teks daripada elemen, tunggu dilaksanakan untuk memastikan elemen kelihatan sebelum mendapatkan semula. Walau bagaimanapun, penantian nampaknya dipintas apabila kod dilaksanakan tanpa titik putus, membawa kepada pengecualian.
Penjelasan Isu
Coretan kod yang disediakan menggunakan kaedah Find Element untuk kelas WebDriverWait, yang menimbulkan pengecualian jika elemen tidak dapat ditemui dalam tempoh tamat masa yang ditentukan (30 saat dalam kes). Kedekatan ini mungkin disebabkan oleh elemen tidak kelihatan atau dimuatkan pada masa tempoh menunggu tamat.
Penyelesaian
Sebagai alternatif, anda boleh menggunakan syarat ElementIsVisible bagi kelas ExpectedConditions dalam kombinasi dengan WebDriverWait. Pendekatan ini akan mendorong penantian sehingga elemen memenuhi syarat (dalam kes ini, boleh dilihat). Selain itu, anda boleh menggunakan kaedah GetAttribute untuk mendapatkan innerHTML elemen dan bukannya sifat Teks.
Berikut ialah contoh menggunakan syarat ElementIsVisible:
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
DotNetSeleniumExtras.WaitHelpers Option
Jika anda bekerja SeleniumExtras.WaitHelpers melalui NuGet, anda boleh memanfaatkan keadaan ElementIsVisible daripada kelas ExpectedConditions seperti berikut:
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
Atas ialah kandungan terperinci Mengapa WebDriverWait Saya Gagal Menunggu Apabila Berjalan Tanpa Titik Putus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!