一尘不染

如何为selenium添加自定义ExpectedConditions?

selenium

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

在我目前的情况下,我想等到某个元素存在,可见,启用并且没有attr“ 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选项卡。我在一个禁用的选项卡上有一个表单,它将在该选项卡变为活动状态之前开始填写该选项卡上的字段。


阅读 350

收藏
2020-06-26

共1个答案

一尘不染

“预期条件”无非是使用lambda表达式的匿名方法。自.NET
3.0以来,这些已成为.NET开发的主要内容,尤其是随着LINQ的发布。由于绝大多数.NET开发人员都对C#lambda语法感到满意,因此WebDriver
.NET绑定的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版本中变得越来越普遍。

2020-06-26