2016-11-18 3 views
0

私は私の自動化フレームワークでは、以下の設定を実装している:C#+ webdriverをPageFactory + NUnitの3並列化可能な

  • C#セレンwebdriverを

  • IObjectContainer

  • Specflow

  • NUnitの3並列可能

  • のXPath(およびすべてのセレクタが)単に「民間のconst文字列」

コードサンプルHomePageSteps(作業コード)のように定義されています

[Binding] 
    public class HomePageSteps 
    { 
     private IWebDriver _driver; 

     public HomePageSteps(IWebDriver driver) 
     { 
      _driver = driver; 
     } 


     private const string LogoTwo = "//img[@alt='xpath']"; 

     [Given(@"I navigation to site")] 
     public void GivenINavigationToSite() 
     { 
      _driver.Navigate().GoToUrl("http://website.com/"); 

      _driver.FindElement(By.XPath(LogoTwo)).Click(); 
     } 
} 

しかし、私はwebdriverをPageFactoryを処理するために属性を使用したいです私のページオブジェクト。私は「Nunit 3 Parallelizable」を使用しない他のプロジェクトでやったことがあります。

コード例(NOT作業コード):

[Binding] 
    public class HomePageSteps 
    { 
     private IWebDriver _driver; 

     public HomePageSteps(IWebDriver driver) 
     { 
      _driver = driver; 
     } 


     [FindsBy(How = How.XPath, Using = "//img[@alt='xpath']")] 
     public IWebElement logo { get; set; } 


     [Given(@"I navigation to site")] 
     public void GivenINavigationToSite() 
     { 
      _driver.Navigate().GoToUrl("http://website.com/"); 

      logo.Click(); 
     } 
} 

ここでの問題は、 'ロゴ' はNULLであることです。この問題がPageFactory、またはspecflowなどの「Nunit 3 Parallelizable」の使用制限に関連しているかどうかはわかりません。

誰でもガイダンスをお願いできますか?

答えて

0

Page Factoryが非スタティックドライバを初期化しない理由は、スタティックドライバを取り込むためです。 Ifページのコンストラクタが次のように定義されています。

ChromeDriverService service = ChromeDriverService.CreateDefaultService(startDirectory + @"\Drivers\", "chromedriver.exe"); 
    IWebDriver Static driver = new ChromeDriver(Service); 
      public HomePageSteps() 
      { 
       PageFactory.InitElements(driver, this); 
      } 

定義したとおりに要素を使用できます。

これについて他の解決策が見つかった場合は教えてください。

関連する問題