我的测试项目基于BDD方法。 我试图通过静态变量调用方法。但是我的行为中的某些内容是错误的。
我的代码:
public class BasePage
{
public T As<T>() where T : BasePage
{
return (T)this;
}
}
public class PropertiesCollection
{
private static BasePage _currentPage;
public static BasePage currentPage
{
get { return _currentPage; }
set
{
ScenarioContext.Current["class"] = value;
_currentPage = ScenarioContext.Current.Get<BasePage>("class");
}
}
}
public sealed class LoginSteps
{
[Given(@"I have navigated to my app")]
public void GivenIHaveNavigatedToMyApp()
{ Browser.Current.Navigate().GoToUrl(ConfigurationManager.AppSettings["seleniumBaseUrl"]);
PropertiesCollection.currentPage = new LoginPage();
}
[Given(@"I typed the (.*) and (.*)")]
public void GivenITypedTheAnd(string username, string password)
{
var m = PropertiesCollection.currentPage.As<LoginPage>().Login(username, password);
}
所以在最后一个代码行中我有消息错误,如&#34;该类型必须可以转换为&#34; .Pages.BasePage&#34;为了在通用方法中使用它作为参数&#34; .Pages.BasePage.As()&#34; 我应该修改什么来修复它?
答案 0 :(得分:0)
如果没有完整的代码,您无法理解您的问题,但让我向您展示如何实施该问题。
public class Core
{
protected CorePage CurrentPage
{
get
{
return ScenarioContext.Current.Get<CorePage>("CurrentPage";
}
set
{
ScenarioContext.Current["CurrentPage"] = value;
}
}
public TPage InstanceOf<TPage>() where TPage : CorePage, new()
{
return new TPage();
}
public TPage As<TPage>() where TPage : CorePage
{
return (TPage) this;
}
}
public class CorePage : Core
{
//Base page class
}
public class HomePage : CorePage
{
public void OpenLogin()
{
//Code
CurrentPage = new LoginPage();
}
}
public class LoginPage : CorePage
{
public void Something()
{
//Code
}
}
[Binding]
public class Step : Core
{
[Given(@"1st step")]
public void BlaBlaBla1()
{
CurrentPage.InstanceOf<HomePage>().OpenLogin();
}
[Then(@"2nd step")]
public void BlaBlaBla2()
{
CurrentPage.As<LoginPage>().Something();
}
}