能够绕过静态方法PageFactory.InitElements,以便我能够一个接一个地运行我的测试

时间:2016-02-24 15:37:50

标签: c# selenium-webdriver

我正在寻找一些建议。

是否有人知道如何绕过静态方法PageFactory.InitElements以便我能够一个接一个地运行我的测试?

背景

当我尝试使用MSunit一个接一个地运行我的selenium webdriver类时。我收到了以下错误。

  

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,测试会运行,但是我的Automation Framework的结构需要这些静态

通过进一步调查,我发现它在静态方法中需要PageFactory.InitElements(Browser.Driver, currentIncidentsPage);

我的自动化框架的设定方式如下

E2ETest

  • RegressionTestsFolder

    • AboutsUsTests.cs
  • TestFramework

    • PageObjectsFolder
      • AboutUsPage.cs
      • HomePage.cs
    • Browser.cs

AboutUsTests Class

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

Pages Class

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();
        }


    }
}

HomePage Class

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 Class

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;
        }

    }
}

任何帮助都会感激不尽,因为我一直在试图解决这个问题。

由于

1 个答案:

答案 0 :(得分: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();
        }
    }
    
  4. 这样,当我在清理类中使用logout时,我在控制台中只有这个错误,但到目前为止,这并没有阻止测试运行。

    在我的页面课程中,我有这个:

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

    抱歉蹩脚的格式化。