我正在寻找一些建议。
是否有人知道如何绕过静态方法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
TestFramework
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;
}
}
}
任何帮助都会感激不尽,因为我一直在试图解决这个问题。
由于
答案 0 :(得分:1)
我得到了类似的错误,但出于不同的原因,在我的情况下,这是因为我的清理类中有一个注销方法,并且出于某种原因不行。如果我从清理中删除注销并仅使用driver.Quit();它运行正常,没有错误。这就是我使用的:
我有一个驱动程序类 - 这是在主框架中,就像你的浏览器一样:
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();
}
}
这样,当我在清理类中使用logout时,我在控制台中只有这个错误,但到目前为止,这并没有阻止测试运行。
在我的页面课程中,我有这个:
public class HomePage
{
public HomePage()
{
PageFactory.InitElements(Utils.driver, this);
}
抱歉蹩脚的格式化。