我正在使用:運行使用Selenium,NUnit的並行多browsertypes一個測試和C#
- 硒的webdriver(V3.2.0)
- NUnit的(V3.6.0)
- C#
我在網上找到了如何在並行使用多個瀏覽器類型來運行一個測試,我的代碼如下,這個工程:
namespace MultipleBrowserTest
{
[TestFixture(typeof(FirefoxDriver))]
[TestFixture(typeof(ChromeDriver))]
[TestFixture(typeof(InternetExplorerDriver))]
[TestFixture(typeof(EdgeDriver))]
public class SiteLoadsTest<TWebDriver> where TWebDriver : IWebDriver, new()
{
private IWebDriver _driver;
[Test]
public void MultipleBrowserTests()
{
_driver = new TWebDriver();
_driver.Navigate().GoToUrl("https://google.com/");
Assert.AreEqual("https://google.com/", _driver.Url);
}
[TearDown]
public void FixtureTearDown()
{
_driver?.Quit();
if (_driver != null) _driver.Dispose();
}
}
}
但是,我想讓這個更加可維護,以便每個測試類QA不必使用'where ...'部分(public class SomeUITestClass<TWebDriver> where TWebDriver : IWebDriver, new()
)對該類進行格式化。我一直在尋找使測試繼承瀏覽器類是這樣的:
public class Browsers<TWebDriver> where TWebDriver : IWebDriver, new()
{
private IWebDriver Browser { get; set; }
public IWebDriver Driver
{
get
{
if (Browser == null)
{
throw new NullReferenceException(
"The WebDriver browser instance was not initialized.");
}
return null;
}
set { Browser = value; }
}
public void LaunchDriver()
{
Browser = new TWebDriver();
}
}
和編輯我的測試是這樣的:
namespace MultipleBrowserTest
{
[TestFixture(typeof(FirefoxDriver))]
[TestFixture(typeof(ChromeDriver))]
[TestFixture(typeof(InternetExplorerDriver))]
[TestFixture(typeof(EdgeDriver))]
public class SiteLoadsTest_InheritedBrowser : Browsers<>
{
[SetUp]
public void Setup()
{
LaunchDriver();
}
[Test]
public void MultipleBrowserTests()
{
Driver.Navigate().GoToUrl("https://google.com/");
Assert.AreEqual("https://google.com/", Driver.Url);
}
[TearDown]
public void FixtureTearDown()
{
Driver?.Quit();
if (Driver != null) Driver.Dispose();
}
}
}
但是我不知道怎麼傳遞到瀏覽器<> 。如果我沒有通過任何事情,我會得到「意外使用未綁定的通用名稱」。如果我通過IWebDriver
,我得到的'IWebDriver'必須是一個帶有公共無參數構造函數的非抽象類型,以便在泛型類型或方法'瀏覽器'中將其用作參數'TWebDriver'。
我已經達到了我的C#技能水平(作爲QA),我不知道如何解決這個問題,甚至是否可以解決!任何幫助將非常appriciated。