Sử dụng giải pháp do Mike Kwan cung cấp có thể có tác động đến hiệu suất thử nghiệm tổng thể, vì chờ đợi ngầm sẽ được sử dụng trong tất cả các cuộc gọi FindEuity.
Nhiều lần bạn sẽ muốn FindEuity bị lỗi ngay lập tức khi không có phần tử (bạn đang kiểm tra trang không đúng định dạng, phần tử bị thiếu, v.v.). Với sự chờ đợi ngầm, các hoạt động này sẽ đợi cho đến khi hết thời gian chờ trước khi ném ngoại lệ. Chờ đợi ngầm định được đặt thành 0 giây.
Tôi đã viết một phương thức mở rộng nhỏ cho IWebDriver để thêm tham số thời gian chờ (tính bằng giây) cho FindElement()
phương thức. Nó khá tự giải thích:
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);
}
}
Tôi đã không lưu trữ đối tượng WebDriverWait vì việc tạo ra nó rất rẻ, tiện ích mở rộng này có thể được sử dụng đồng thời cho các đối tượng WebDriver khác nhau và tôi chỉ thực hiện tối ưu hóa khi thực sự cần thiết.
Cách sử dụng rất đơn giản:
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)
. Nó làm cho nó rõ ràng hơn IMO