2016-02-24 27 views
0

我正在尋找一些建議。能夠了解靜態方法PageFactory.InitElements,以便我能夠一個接一個地運行我的測試

有沒有人知道我將如何得到這個靜態方法PageFactory.InitElements,以便我能夠運行我的測試一個接一個?

背景

當我嘗試運行我的硒類的webdriver陸續使用MSunit。我收到以下錯誤。

OpenQA.Selenium.WebDriverException:意外的錯誤。 System.Net.WebException:無法連接到遠程服務器---> System.Net.Sockets.SocketException:由於目標機器主動拒絕,無法建立連接127.0.0.1:7055

我知道如果我要從所有類中刪除靜態(基於我之前詢問過的這個問題: - Attempting to run multiple Selenium Webdriver tests using Nunit fails,測試將運行,但是我的自動化框架的結構需要這些靜態數據。發現PageFactory.InitElements(Browser.Driver, currentIncidentsPage);它採用Static方法。

我的Automation Framework設置的方式出是如下

E2ETest

  • RegressionTestsFolder

    • AboutsUsTests.cs
  • TestFramework

    • PageObjectsFolder
      • AboutUsPage.cs
      • HomePage.cs
    • 瀏覽器。CS

AboutUsTests類

public class AboutUsTests 
{ 
    [TestMethod] 
    public void Go_To_About_Us_Page_Link_Test() 
    { 
     Pages.HomePage.Goto(); 
     Pages.HomePage.SelectAboutLink(); 
     Assert.IsTrue(Pages.AboutUsPage.IsAt()); 
    } 
} 

頁類

public static class Pages 
{ 

    public static HomePage HomePage 
    { 
     get 
     { 

      var homePage = new HomePage(); 
      PageFactory.InitElements(Browser.Driver, homePage); 
      return homePage; 
     } 
    } 

    public static AboutUsPage AboutUsPage 
    { 
     get 
     { 
      var aboutUsPage = new AboutUsPage(); 
      PageFactory.InitElements(Browser.Driver, aboutUsPage); 
      return aboutUsPage; 
     } 
    } 
} 

瀏覽器類

{ 
    using System; 
    using System.Linq; 
    using System.Threading; 

    using OpenQA.Selenium; 
    using OpenQA.Selenium.Firefox; 

    public static class Browser 
    { 

     private static readonly IWebDriver webDriver = new FirefoxDriver(); 

     public static ISearchContext Driver 
     { 
      get 
      { 
       return webDriver; 
      } 
     } 


     public static string Title 
     { 
      get 
      { 
       return webDriver.Title; 
      } 
     } 



     public static void Goto(string url) 
     { 
      webDriver.Url = url; 
     } 



     public static void Close() 
     { 
      webDriver.Close(); 
     } 


    } 
} 

主頁類

public class HomePage 
    { 

     private static readonly string Url = "http://myurl.com"; 

     private static readonly string PageTitle = "My title page"; 


     [FindsBy(How = How.CssSelector, Using = "[href*='/about/']")] 
     private IWebElement aboutUsLinkElement; 



     public void Goto() 
     { 
      Browser.Goto(Url); 
      Browser.BrowserMax(); 
     } 


     public bool IsAt() 
     { 
      return Browser.Title == PageTitle; 
     } 



     public void SelectAboutLink() 
     { 
      this.aboutUsLinkElement.Click(); 
     } 


    } 
} 

AboutUsPage類

namespace TestFramework.PageObjects 
{ 
    using System; 

    using TestFramework.Interfaces; 

    using OpenQA.Selenium; 
    using OpenQA.Selenium.Support.PageObjects; 


    public class AboutUsPage 
    { 

     private static readonly string PageTitle = "About Us"; 

     public bool IsAt() 
     { 
      return Browser.Title == PageTitle; 
     } 

    } 
} 

任何幫助將感激學徒,因爲我一直轉圈圈試圖弄清楚這一點。

感謝

+0

你也使用nunit框架嗎?你的測試者是什麼? – AlexCharizamhard

+0

https://github.com/AlexMoll91/SeleniumExample如果您想要使用pagefactory並使用nunit運行的示例的參考。 – AlexCharizamhard

+0

我現在使用MSunit作爲測試運行器, – ChrisMcLellan

回答

1

,我收到了類似的錯誤,但出於不同的原因,在我的情況下,它是因爲我有一個註銷方法在我清理階級和出於某種原因不能確定。如果我從清理中刪除註銷並僅使用driver.Quit();它工作正常,沒有錯誤。這是我用:

  1. 我對於駕駛者一類 - 這是主要的框架,像你的瀏覽器:

    public class Utils 
    { 
        public static IWebDriver driver { get; set; } 
        .... 
    } 
    
  2. 我在測試類TestUtil.cs級別:

    public static IWebDriver GetDriver() 
    { 
        string driverName = ConfigurationManager.AppSettings["driver"]; 
        switch(driverName) 
        { 
         case "Chrome": 
         Utils.driver = new ChromeDriver(); 
         break; 
    
         case "Firefox": 
         Utils.driver = new FirefoxDriver(); 
         break; 
        } 
        return Utils.driver; 
    } 
    
  3. 在我的測試中,我用這個:

    [TestClass] 
    public class HomePageTests 
    { 
    
        public TestContext TestContext { get; set; } 
    
    
        [ClassInitialize] 
        public static void Initialize(TestContext context) 
        { 
         if (Utils.driver != null) 
          Utils.driver.Quit(); 
    
         Utils.driver = TestUtils.GetDriver(); 
         Utils.driver.Manage().Window.Maximize(); 
        } 
    } 
    

這樣我在控制檯中只有在清理類中使用註銷時出現該錯誤,但到目前爲止這不會阻止測試運行。

在我的網頁類我有這樣的:

public class HomePage 
{ 

    public HomePage() 
    { 
     PageFactory.InitElements(Utils.driver, this); 
    } 

對不起,蹩腳的格式。

+1

感謝您的意見@ ami2110,我發現解決我的問題在這裏: - https://github.com/PaulSodimu/PageObjectPattern,但我相信你的解決方案也是一個很好的解決方案。我希望我共享的鏈接可以幫助你解決登出問題 – ChrisMcLellan

+0

謝謝你的鏈接,我已經用這種方式進行了清理,只包含driver.Quit();它工作正常。我以爲我會遇到會話混合問題,因爲我不做註銷,但似乎webdriver足夠聰明,每次都會啓動一個乾淨的新會話,所以我不一定需要在清理類中註銷。然而,你提供的鏈接有很多有用的代碼,我可以使用,感謝分享。 – ami2110

相關問題