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

本文关键字:一个 测试 我的 运行 静态方法 PageFactory InitElements | 更新日期: 2023-09-27 18:36:11

我正在寻找一些建议。

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

背景

当我尝试使用 MSunit 一个接一个地运行我的硒网络驱动程序类时。我收到以下错误。

OpenQA.Selenium.WebDriverException:意外错误。System.Net.WebException:无法连接到远程服务器 ---> System.Net.Sockets.SocketException:无法建立连接,因为目标计算机主动拒绝了它 127.0.0.1:7055

我知道,如果我要从所有类中删除静态(基于我之前问过的这个问题:- 尝试使用 Nunit 运行多个 Selenium Webdriver 测试失败,测试将运行,但是我的自动化框架的结构需要这些静态。

通过进一步调查,我发现PageFactory.InitElements(Browser.Driver, currentIncidentsPage);它采用静态方法。

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

E2ETest

  • 回归测试文件夹

    • 关于我们测试.cs
  • 测试框架

    • 页面对象文件夹
      • 关于我们页面.cs
      • 主页.cs
    • 浏览器.cs

关于我们测试类

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

    }
}

关于我们页面类

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

任何帮助都会感激学徒,因为我一直在兜圈子试图弄清楚这一点。

谢谢

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

我遇到了类似的错误,但出于不同的原因,就我而言,这是因为我的清理类中有一个注销方法,并且由于某种原因不行。如果我从清理中删除注销并仅使用驱动程序。退出(); 它工作正常,没有错误。这是我使用的:

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

很抱歉格式蹩脚。