我正在尋找一點幫助理解NUnit與Visual Studio中的C#和Selenium一起使用。Nunit參數化與C#和Selenium
我已經構建了一套測試,其中很多測試都是通過自學習和YouTube視頻拼湊在一起的。
該項目過去只需要進行一系列針對多個瀏覽器中的單個站點運行的迴歸測試。
我已經實現了這一點,我對結果很滿意。
我想現在要做的是擴大我一直在測試對這種遠一點
該產品是reskinned爲不同的客戶,其中的內容99%是同一個網站。
我不想在visual studio中創建多個項目/解決方案,而是希望做一些更有活力的事情來覆蓋對不同皮膚的迴歸。
我想要做的是參數化測試用例/瀏覽器/網址組合,例如
- TestCase1 /鍍鉻/站點1
- TestCase1 /鍍鉻/站點2
- TestCase1/EDGE /站點1
- TestCase1/EDGE /站點2等
我已經能夠得到Visual Studio測試資源管理器識別參數,但由於某種原因,它似乎產生了意想不到的結果,例如
- TestCase1 /站點1
- testcase1 /鉻
- TestCase1 /站點2
- TestCase1 /邊緣/等。
我見過論壇,他們討論的是使用NUnit參數做類似於我在說的內容,但一直沒有能夠產生想要的結果。
我認爲這只是簡單地添加另一個NUnit嬰兒車並傳遞它,就像我以前那樣。這裏是一個slimmed down
版目前我使用的代碼:
namespace AutomationStuffs.SmokeTests
{
[TestFixture]
public class LoginTests : TestBase
{
[Test]
[TestCaseSource(typeof(TestBase), "BrowserToRunWith")]
public void FirstTimeLogin(String BrowserName, String Url)
{
//Browser Driver Setup For test
Setup(BrowserName);
//...DO SOME TESTING THINGS
}
}
}
namespace AutomationStuffs.Utilities
{
public class TestBase
{
public static IWebDriver driver;
public void Setup(String BrowserName)
{
Driver.Intialize(BrowserName);
//... DO SOME SETUP STUFF
LoginPage.GoTo();
//..I DO SOME LOGIN SETUP HERE
}
public static IEnumerable<String> BrowserToRunWith()
{
String[] browsers = BrowsersList.theBrowserList.Split(',');
foreach (String b in browsers)
{
yield return b;
}
}
}
}
namespace AutomationStuffs.Pages
{
public class LoginPage
{
public static void GoTo()
{
Driver.Instance.Navigate().GoToUrl(Driver.baseURL);
}
}
}
namespace AutomationStuffs.Selenium
{
public class Driver
{
public static IWebDriver Instance { get; set; }
public static string baseURL
{
get
{
string url = System.Configuration.ConfigurationManager.AppSettings["BaseUrl"];
return url;
}
}
public static string chromeDriver
{
get
{
string driver = System.Configuration.ConfigurationManager.AppSettings["ChromeDriver"];
driver = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, driver);
return driver;
}
}
public static string ieDriver
{
get
{
string driver = System.Configuration.ConfigurationManager.AppSettings["IEDriver"];
driver = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, driver);
return driver;
}
}
public static string edgeDriver
{
get
{
string driver = System.Configuration.ConfigurationManager.AppSettings["EdgeDriver"];
driver = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, driver);
return driver;
}
}
public static void Intialize(String BrowserName)
{
String DRIVER_PATH = chromeDriver;
String DRIVER_PATH_IEFF = ieDriver;
String DRIVER_PATH_EDGE = edgeDriver;
var optionsChrome = new ChromeOptions();
optionsChrome.AddArgument("start-maximized");
optionsChrome.AddArgument("no-sandbox");
var optionsIe = new InternetExplorerOptions();
if (BrowserName.Equals("ie"))
{
Instance = new InternetExplorerDriver(DRIVER_PATH_IEFF);
Instance.Manage().Window.Maximize();
}
else if (BrowserName.Equals("firefox"))
{
Instance = new FirefoxDriver();
Instance.Manage().Window.Maximize();
}
else if (BrowserName.Equals("edge"))
{
Instance = new EdgeDriver(DRIVER_PATH_EDGE);
Instance.Manage().Window.Maximize();
}
else
{
Instance = new ChromeDriver(DRIVER_PATH, optionsChrome);
}
}
}
}
以下是我認爲我必須做的(很顯然只是複製和適應的基本方法,在適當情況下):
namespace AutomationStuffs.SmokeTests
{
[TestFixture]
//[Parallelizable]
public class LoginTests : TestBase
{
[Test]
[TestCaseSource(typeof(TestBase), "BrowserToRunWith")]
[TestCaseSource(typeof(TestBase), "URLToRunWith")]
public void FirstTimeLogin(String BrowserName, String Url)
{
//Browser Driver Setup For test
Setup(BrowserName);
Assert.IsTrue(FiveComponentsAndDocStorePage.AssertOnThePage());
}
}
}
這是答案!非常感謝。我的印象很不正確,我只能再次通過TestCaseSource值,NUnit做了一些魔術 - 顯然,我錯了哈哈哈。 – saab613