首页 > 解决方案 > WebDriverWait 可以用在已经定义的元素上吗?

问题描述

我正在构建一个自动化框架,它使用页面对象模型(POM)并有一个名为 HomePage 的类文件。

我已经使用以下方法声明了元素:

[FindsBy(How = How.Id, Using = "TextField1")]
private IWebElement FirstTextField{ get; set; }

我已将我的 WebDriverWait 声明如下:

WebDriverWait wait = new WebDriverWait(driver,TimeSpan.FromSeconds(30));

我在 HomePage.cs 中有一个名为 Validate() 的方法,在此我想使用 WebDriverWait,如下所示:

wait.Until(ExpectedConditions.ElementIsVisible(FirstTextField))

如何以这种方式使用 WebDriverWait,而不必使用 By 定位器:

wait.Until(ExpectedConditions.ElementIsVisible(By.Id("TextField1")));

标签: c#seleniumwebdriverwait

解决方案


ExpectedConditions.ElementIsVisible()IWebElement在 C# ExpectedConditions中没有重载。您可以使用自定义实现

public static Func<IWebDriver, IWebElement> ElementIsVisible(IWebElement element)
{
    return (driver) =>
        {
            try
            {
                return return element.Displayed ? element : null;
            }
            catch (StaleElementReferenceException)
            {
                return null;
            }
        };
}

用途:

wait.Until(ElementIsVisible(FirstTextField));

推荐阅读