如何将Expected Condition添加到通用findElement方法中

时间:2016-08-12 18:32:22

标签: c# selenium

请看这个功能:

public static IWebElement WaitAndFindElement(By by, int timeoutInSeconds)
{
    DefaultWait<IWebDriver> wait = new DefaultWait<IWebDriver>(driver);
    wait.Timeout = TimeSpan.FromSeconds(timeoutInSeconds);
    wait.PollingInterval = TimeSpan.FromMilliseconds(10000);
    wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
    return wait.Until<IWebElement>(ExpectedConditions.ElementIsVisible(by));
}

正如您在此函数中所看到的,我正在使用ElementIsVisible ExpectedConditions,但我希望能够发送到此函数ExpectedConditions,以防我需要另一个函数。 有什么建议吗?

更新

    public static IWebElement find(By by, Func<ExpectedConditions, bool> condition, int timeOut)
    {
        WebDriverWait webDriverWait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeOut));
        webDriverWait.IgnoreExceptionTypes(typeof(NoSuchElementException));
        IWebElement elem = webDriverWait.Until<IWebElement>(ExpectedConditions.ElementIsVisible(by));
        return elem;
    }

所以现在它差不多完成了,我不能用ExpectedConditions.ElementIsVisible取代condition

  

参数1:无法转换为&#39; OpenQA.Selenium.By&#39;至   &#39; OpenQA.Selenium.Support.UI.ExpectedConditions&#39;

2 个答案:

答案 0 :(得分:1)

实际上p oc new-app docker.io/<repo>/<app-name> Selenium绑定WebDriver实现只有一些方法,而且无法将多个C#添加到一起。

但你可以像你要求的那样创建一个自定义等待,如下所示:

ExpectedConditions

已修改: - 如果您想根据自己的选择选择不同的ExpectedConditions,请尝试以下操作:

public static IWebElement WaitAndFindElement(By by, int timeoutInSeconds)
{
    WebDriverWait webDriverWait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));

     return webDriverWait.Until(d => d.FindElement(by).Enabled
      && d.FindElement(by).Displayed);
 }

或者

ExpectedConditions

答案 1 :(得分:0)

在java中我会尝试这样的事情。不知道C#虽然

private <T> void webwait(int timeOut, int retry, ExpectedCondition<T> expCond)   {
    new WebDriverWait(driver, timeOut, retry).until(expCond);
}

使用它

webwait(2, 100, ExpectedConditions.visibilityOfElementLocated(
            By.id("divid")));

我有一个void返回,在你的情况下你可以返回元素。然后你可以删除genric T并输入ExpectedCondition参数。