माइक कवन द्वारा प्रदान किए गए समाधान का उपयोग करने से समग्र परीक्षण प्रदर्शन पर प्रभाव पड़ सकता है, क्योंकि निहित प्रतीक्षा का उपयोग सभी FindElement कॉल में किया जाएगा।
कई बार आप चाहते हैं कि कोई तत्व मौजूद न होने पर आप तुरंत FindElement को विफल कर दें (आप किसी विकृत पृष्ठ के लिए परीक्षण कर रहे हैं, लापता तत्व, आदि)। निहित प्रतीक्षा के साथ ये ऑपरेशन अपवाद को फेंकने से पहले पूरे समय समाप्त होने की प्रतीक्षा करेंगे। डिफ़ॉल्ट निहित प्रतीक्षा 0 सेकंड के लिए सेट है।
मैंने IWebDriver के लिए थोड़ा विस्तार विधि लिखी है जो विधि में एक टाइमआउट (सेकंड में) पैरामीटर जोड़ता है FindElement()
। यह काफी आत्म-व्याख्यात्मक है:
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);
}
}
मैंने WebDriverWait ऑब्जेक्ट को कैश नहीं किया क्योंकि इसका निर्माण बहुत सस्ता है, इस एक्सटेंशन का उपयोग अलग-अलग WebDriver ऑब्जेक्ट्स के लिए एक साथ किया जा सकता है, और मैं केवल तब अनुकूलन करता हूं जब अंततः आवश्यकता होती है।
उपयोग सीधे-आगे है:
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)
। यह अधिक स्पष्ट IMO बनाता है