c# - 如何为 Selenium 添加自定义 ExpectedConditions?

标签 c# selenium selenium-webdriver

我正在尝试为 Selenium 编写自己的 ExpectedConditions,但我不知道如何添加新的。有人有例子吗?我在网上找不到任何教程。

在我目前的情况下,我想等到元素存在、可见、启用并且没有属性“aria-disabled”。我知道这段代码不起作用:

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(seconds));
return wait.Until<IWebElement>((d) =>
    {
        return ExpectedConditions.ElementExists(locator) 
        && ExpectedConditions.ElementIsVisible 
        &&  d.FindElement(locator).Enabled 
         && !d.FindElement(locator).GetAttribute("aria-disabled")
    }

编辑:一些附加信息:我遇到的问题是 jQuery 选项卡。我在禁用的选项卡上有一个表单,它会在该选项卡激活之前开始填写该选项卡上的字段。

最佳答案

“预期条件”只不过是使用 lambda 表达式的匿名方法。自 .NET 3.0 以来,这些已成为 .NET 开发的主要内容,尤其是随着 LINQ 的发布。由于绝大多数 .NET 开发人员都熟悉 C# lambda 语法,因此 WebDriver .NET 绑定(bind)的 ExpectedConditions 实现只有几个方法。

按照您的要求创建等待看起来像这样:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until<IWebElement>((d) =>
{
    IWebElement element = d.FindElement(By.Id("myid"));
    if (element.Displayed &&
        element.Enabled &&
        element.GetAttribute("aria-disabled") == null)
    {
        return element;
    }

    return null;
});

如果您对这种构造没有经验,我建议您成为这样的人。它只会在 .NET 的 future 版本中变得更加普遍。

关于c# - 如何为 Selenium 添加自定义 ExpectedConditions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21339339/

相关文章:

c# - 不明确的 IQueryable<T>.Where 和 IEnumerable<T>.Where 扩展方法

c# - 将字节数组作为新程序执行

python - 当要求查找元素时出现奇怪的 Python Selenium 错误消息

java - ChromeDriver 将无法运行(Selenium Webdriver)

java - Selenium CTRL 和单击不起作用?

c# - 开启类型变量

c# - 删除大量记录需要很长时间

firefox - Selenium 网络驱动程序 : Delete Cookies On All Domains

python/selenium/chromedriver 超时异常

java - 有没有办法记录最小化浏览器窗口的截图