【发布时间】:2020-08-30 16:56:42
【问题描述】:
我是 C# .net 的新手,我目前正在开发一个 Selenium C# 项目,该项目具有 BrowserFactory 类并具有名为 Driver 的 POCO。
InitBrowser 方法设置它的值。
当尝试在具有 2 个并行测试的 NUnitFramework 中使用 Parallel Test 运行测试时,它肯定会出错,因为您可以看到代码不是线程安全的,因此它无法在并行测试环境中工作。
下面是代码:
namespace SeleniumAutomationFramework.WrapperFactory {
class BrowserFactory
{
private static readonly IDictionary<string, IWebDriver> Drivers = new Dictionary<string, IWebDriver>();
private static IWebDriver driver;
public static IWebDriver Driver
{
get
{
if (driver == null)
throw new NullReferenceException("The WebDriver browser instance was not initialized. Try to call the method InitBrowser instead.");
return driver;
}
private set
{
driver = value;
}
}
public static void InitBrowser(string browserName)
{
switch(browserName.ToLower())
{
case "firefox":
driver = new FirefoxDriver();
Drivers.Add("Firefox", Driver);
break;
case "chrome":
var options = new ChromeOptions();
options.AddArguments(
"--headless",
"--no-sandbox",
"--disable-dev-shm-usage"
);
driver = new ChromeDriver(options);
Drivers.Add("Chrome", Driver);
break;
case "ie":
driver = new InternetExplorerDriver();
Drivers.Add("IE", Driver);
break;
//case "chromium":
// driver = new ChromeDriver();
// break;
default:
driver = new ChromeDriver();
Drivers.Add("Chrome", Driver);
break;
}
}
public static void LoadApplication(string url)
{
Driver.Navigate().GoToUrl(url);
}
public static void CloseAllDrivers()
{
foreach (var key in Drivers.Keys)
{
Drivers[key].Close();
Drivers[key].Quit();
}
}
} }
页面生成器类正在调用 Driver 属性。
namespace SeleniumAutomationFramework.PageObjects
{
public static class Page
{
private static T GetPage<T>() where T : new()
{
var page = new T();
PageFactory.InitElements(BrowserFactory.Driver, page);
return page;
}
public static HomePage Home
{
get { return GetPage<HomePage>(); }
}
public static LoginPage Login
{
get { return GetPage<LoginPage>(); }
}
}
}
【问题讨论】:
-
对了,你这里没有POCO,POCO只是一个简单的类(Plain Old CLR Object)
-
哦,我是说 DTO?
-
好吧,它也不是 DTO,它通常是一个只有属性而根本没有业务逻辑的类 :)
-
好的,那么这个 '''public static IWebDriver Driver''' 叫什么?
-
这只是一个静态属性。
标签: c# .net selenium .net-core