Menggunakan solusi yang disediakan oleh Mike Kwan dapat berdampak pada kinerja pengujian secara keseluruhan, karena menunggu implisit akan digunakan dalam semua panggilan FindElement.
Sering kali Anda ingin FindElement gagal segera saat sebuah elemen tidak ada (Anda sedang menguji halaman yang salah bentuk, elemen yang hilang, dll.). Dengan menunggu implisit, operasi ini akan menunggu seluruh batas waktu berakhir sebelum melempar pengecualian. Default implisit wait diatur ke 0 detik.
Saya telah menulis sedikit metode ekstensi untuk ke IWebDriver yang menambahkan parameter batas waktu (dalam detik) ke FindElement()
metode ini. Cukup jelas:
public static class WebDriverExtensions
{
public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds)
{
if (timeoutInSeconds > 0)
{
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
return wait.Until(drv => drv.FindElement(by));
}
return driver.FindElement(by);
}
}
Saya tidak men-cache objek WebDriverWait karena pembuatannya sangat murah, ekstensi ini dapat digunakan secara bersamaan untuk objek WebDriver yang berbeda, dan saya hanya melakukan optimasi ketika akhirnya diperlukan.
Penggunaan mudah:
var driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://localhost/mypage");
var btn = driver.FindElement(By.CssSelector("#login_button"));
btn.Click();
var employeeLabel = driver.FindElement(By.CssSelector("#VCC_VSL"), 10);
Assert.AreEqual("Employee", employeeLabel.Text);
driver.Close();
TimeSpan.FromSeconds(5)
. Itu membuatnya lebih jelas IMO