2017-11-20 1 views
-1

My Test Projectが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); 
     } 

だから、最後のコード行で、私は、このような一般的な方法では、パラメータとしてそれを使用するためには.Pages.BasePage」「タイプはに変換可能でなければならない」などのメッセージエラーがあります「.Pages.BasePage.As()」 は、私は修正のためにそれをどのように変更すべきか?

+0

'LoginPage'の定義は何ですか? 'BasePage'を拡張していますか? – Lee

+0

投稿のログインページもあります。なぜプライベート静的BasePage _currentPageが必要ですか? – unickq

+0

'public Tのポイントは何ですか?()T:BasePage'?使用法は 'myBasePage.As ()'になりますが、 'myObject as DerivedPage'は既にC#で利用可能です。さらに、あなたのバージョンは例外をスローするハードキャストですが、既存の' as'実装は単純に戻りますヌル。 – Flater

答えて

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(); 
    } 
} 
関連する問題