返回动态未知类型

时间:2017-11-12 07:59:40

标签: c# selenium generics selenium-webdriver

作为使用页面对象模式的一部分,我有一个单击按钮时应该return类的方法。 问题是我在列表中有几个按钮,每个按钮返回一个不同的页面,因此是一个不同的类。 我尝试使用以下内容但收到错误。

  public dynamic ClickTheMenuButtonWorkplace<T>(string ElementID, T ClassToReturn)
    {
        WebDriverWait wait = new WebDriverWait(_webdriver, TimeSpan.FromSeconds(10));
        var MenuButton = wait.Until(x => x.FindElement(By.Id(ElementID)));
        MenuButton.Click();

        return ClassToReturn;
    }

根据点击的按钮,T实际上代表正在返回的类。

使用此方法的一个示例是:

Lakochot IDDetails = new SargelElyon(_webdriver).ClickTheMenuInabWorkplace("nav_conts", new Lakochot(_webdriver));
IDDetails.foo();

LoginPgae目前只有一个初始化webdriver的构造函数,并且有一个foo方法可以打印一些内容。

我收到错误说: Missing compiler required member Microsoft.CSharp.RuntimeBinder.Binder.Convert

也许还有更好的方法可以做到这一点..?

1 个答案:

答案 0 :(得分:1)

在您的具体情况下,为什么不返回T

  

根据点击的按钮,T实际上代表正在返回的类。

让它看起来就像你想要的那样。

public T ClickTheMenuButtonWorkplace<T>(string ElementID, T ClassToReturn)
{
    WebDriverWait wait = new WebDriverWait(_webdriver, TimeSpan.FromSeconds(10));
    var MenuButton = wait.Until(x => x.FindElement(By.Id(ElementID)));
    MenuButton.Click();

    return ClassToReturn;
}

...

var IDDetails = new SargelElyon(_webdriver)
        .ClickTheMenuButtonWorkplace("nav_conts", new Lakochot(_webdriver));
// ^ is a Lakochot
IDDetails.foo();

如果您想使用此处可能不需要的dynamic,请参阅Tom Coldenhoff's answer