In C#, a class cannot contain code except within a method or when declaring a property.
Here's how I set up the driver in my framework that's built using NUnit.
WebDriverHelper.cs
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Edge;
namespace SeleniumFramework.Common
{
class WebDriverHelper
{
/// <summary>
/// Gets the name of the browser from the NUnit TestContext.
/// </summary>
/// <returns>The browser name.</returns>
public static Browser GetBrowserFromTestContext()
{
string browserValue = TestContext.Parameters.Get("browser")!;
if (Enum.TryParse(browserValue, true, out Browser browser))
{
return browser;
}
throw new ArgumentException($"<{browserValue}> is not a defined browser type.");
}
/// <summary>
/// Gets the desired Selenium driver from the config.
/// </summary>
/// <returns>A driver instance.</returns>
public static IWebDriver GetDriver()
{
Browser browser = GetBrowserFromTestContext();
switch (browser)
{
case Browser.Chrome:
return new ChromeDriver();
case Browser.Edge:
return new EdgeDriver();
default:
throw new ArgumentException($"{browser} is not defined in GetDriver().");
}
}
/// <summary>
/// A list of supported browsers.
/// </summary>
public enum Browser
{
Chrome,
Edge
}
}
}
TestContext.Parameters.Get("browser")!;
pulls the value from the local.runsettings
file, e.g.
<RunSettings>
<RunConfiguration>
<TargetPlatform>x64</TargetPlatform>
<TargetFrameworkVersion>net7.0</TargetFrameworkVersion>
</RunConfiguration>
<TestRunParameters>
<Parameter name="browser" value="chrome" />
<Parameter name="environment" value="prod" />
</TestRunParameters>
</RunSettings>
BaseTest.cs
using OpenQA.Selenium;
using SeleniumFramework.Common;
namespace SeleniumFramework.Tests
{
public class BaseTest
{
/// <summary>
/// The thread-safe driver instance.
/// </summary>
public ThreadLocal<IWebDriver> Driver = new ThreadLocal<IWebDriver>();
/// <summary>
/// Holds the URL for the landing page.
/// </summary>
public string Url;
[OneTimeSetUp]
public void OneTimeSetup()
{
Url = // get from config file;
}
[SetUp]
public void Setup()
{
Driver.Value = WebDriverHelper.GetDriver();
Driver.Value.Url = Url;
Driver.Value.Manage().Window.Maximize();
}
[TearDown]
public void TearDown()
{
Driver.Value?.Quit();
}
[OneTimeTearDown]
public void OneTimeTearDown()
{
Driver.Dispose();
}
}
}
In your case, you would add browser options in GetDriver()
in WebDriverHelper.cs.