Örtülü bekleme tüm FindElement çağrılarında kullanılacağından, Mike Kwan tarafından sağlanan çözümün kullanılması genel test performansında etkili olabilir.
Çoğu zaman, bir öğe mevcut olmadığında FindElement öğesinin hemen başarısız olmasını istersiniz (hatalı biçimlendirilmiş bir sayfayı, eksik öğeleri vb. Test ediyorsunuz). Örtülü bekleme ile bu işlemler istisnayı atmadan önce tüm zaman aşımı süresinin dolmasını bekler. Varsayılan örtülü bekleme 0 saniyeye ayarlanmıştır.
Yönteme bir zaman aşımı (saniye cinsinden) parametresi ekleyen IWebDriver'a küçük bir uzantı yöntemi yazdım FindElement()
. Oldukça açıklayıcı:
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);
}
}
Oluşturulması çok ucuz olduğu için WebDriverWait nesnesini önbelleğe almadım, bu uzantı farklı WebDriver nesneleri için aynı anda kullanılabilir ve yalnızca nihayetinde gerektiğinde optimizasyon yaparım.
Kullanımı basittir:
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)
. Bu daha açık hale getirir IMO