Mein Testprojekt basiert auf dem BDD-Ansatz. Ich habe versucht, Methode über statische Variable aufzurufen. Aber etwas in meinen Handlungen ist falsch.Der Typ muss konvertierbar sein, falls generisches
Mein Code:
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);
}
So in der letzten Codezeile I Fehlermeldung, zB um .Pages.BasePage“„Der Typ muss auf konvertierbar sein“in der generischen Methode als Parameter zu verwenden „.Pages.BasePage.As()“ Was soll ich fix ändern Sie es?
Was ist die Definition von "LoginPage"? Verlängert es "BasePage"? – Lee
Post LoginPage-Code auch. Warum benötigen Sie überhaupt eine private statische BasePage _currentPage? – unickq
Was ist der Punkt der öffentlichen T As() wo T: BasePage? Die Verwendung würde als 'myBasePage.As ()' enden, während 'myObject als DerivedPage' bereits in C# verfügbar ist ... Außerdem ist Ihre Version eine Hardcast, die Exceptions auslöst, während die vorhandene 'as'-Implementierung einfach zurückkehrt Null. –
Flater