作为使用页面对象模式的一部分,我有一个单击按钮时应该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
也许还有更好的方法可以做到这一点..?
答案 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。