能够绕过静态方法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;
}
}
}
任何帮助都会感激学徒,因为我一直在兜圈子试图弄清楚这一点。
谢谢
我遇到了类似的错误,但出于不同的原因,就我而言,这是因为我的清理类中有一个注销方法,并且由于某种原因不行。如果我从清理中删除注销并仅使用驱动程序。退出(); 它工作正常,没有错误。这是我使用的:
-
我有一个驱动程序类 - 这是在主框架中,就像您的浏览器一样:
public class Utils { public static IWebDriver driver { get; set; } .... }
-
我在测试级别有一个类 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; }
-
在我的测试中,我使用这个:
[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);
}
很抱歉格式蹩脚。