gpt4 book ai didi

c# - Selenium C# WebDriver : Wait until element is present

转载 作者:IT王子 更新时间:2023-10-29 03:30:40 24 4
gpt4 key购买 nike

我想确保在 webdriver 开始执行操作之前存在一个元素。

我正在尝试让这样的东西工作:

WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0, 0, 5));
wait.Until(By.Id("login"));

我主要是在纠结如何设置匿名函数...

最佳答案

使用 solution provided by Mike Kwan可能会对整体测试性能产生影响,因为隐式等待将用于所有 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();

关于c# - Selenium C# WebDriver : Wait until element is present,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6992993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com