Dalam WebDriver, WebDriverWait direka untuk menjeda pelaksanaan ujian sehingga syarat tertentu dipenuhi. Walau bagaimanapun, dalam senario tertentu, pengguna menghadapi isu membingungkan WebDriverWait seolah-olah mengabaikan menunggu elemen yang ditentukan.
Teka-teki:
Seorang pengguna cuba meminta WebDriver menunggu untuk elemen untuk muncul sebelum mendapatkan semula teksnya. Walau bagaimanapun, apabila menjalankan kod tanpa titik putus, penantian akan dipintas dan pengecualian berlaku.
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); IWebElement message = wait.Until(driver => driver.FindElement(By.ClassName("block-ui-message"))); string messageText = message.Text;
Insight into the Solution:
Inti masalah terletak pada strategi pencari yang digunakan. Menggunakan FindElement sahaja mungkin tidak selalu mencukupi untuk memastikan keterlihatan elemen. Untuk menangani perkara ini, pertimbangkan untuk menggunakan keadaan ElementIsVisible dengan strategi pencari yang lebih terperinci:
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(30)).Until(ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
Alternatif dengan NuGet:
Jika DotNetSeleniumExtras.WaitHelpers dipasang melalui NuGet, anda boleh memudahkan sintaks sebagai berikut:
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
Dengan menggunakan teknik ini, anda boleh memastikan bahawa WebDriver menjeda pelaksanaan secara berkesan sehingga elemen yang dinyatakan kelihatan hadir dan boleh diperoleh semula.
Atas ialah kandungan terperinci Mengapa WebDriverWait Saya Nampaknya Mengabaikan Elemen Menunggu dalam Selenium WebDriver?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!