I am trying to design some classes which I intent to use as a framework. I would like them to be compliant to SOLID design principles.
I had a basic structure and then I implemented Strategy design pattern and tried adding dependency injection as well.
Would like this to be reviewed so that I know if my understanding is correct or can still be made better.
public interface IBrowser
{
IWebDriver GetWebDriver(string webDriverFolderPath);
}
public class EdgeBrowser : IBrowser
{
public IWebDriver GetWebDriver(string webDriverFolderPath)
{
var options = new EdgeOptions()
{
PageLoadStrategy = PageLoadStrategy.Eager,
UseInPrivateBrowsing = true
};
return new EdgeDriver(webDriverFolderPath, options, TimeSpan.FromSeconds(60));
}
}
public class IEBrowser : IBrowser
{
public IWebDriver GetWebDriver(string webDriverFolderPath)
{
var options = new InternetExplorerOptions()
{
IntroduceInstabilityByIgnoringProtectedModeSettings = true
};
return new InternetExplorerDriver(webDriverFolderPath, options, TimeSpan.FromSeconds(60));
}
}
public interface IConfiguration
{
string GetConfiguration(string key);
}
public class AppSettingsConfiguration : IConfiguration
{
public string GetConfiguration(string key)
{
return ConfigurationManager.AppSettings[key].ToString();
}
}
public class WebDriver
{
private static Dictionary<Enums.Browsers, IBrowser> Browsers = new Dictionary<Enums.Browsers, IBrowser>();
private static Dictionary<string, Enums.Browsers> BrowserMapper = new Dictionary<string, Enums.Browsers>();
private static AppSettingsConfiguration _AppSettingsConfiguration;
static WebDriver()
{
Browsers.Add(Enums.Browsers.Edge, new EdgeBrowser());
Browsers.Add(Enums.Browsers.IE, new IEBrowser());
Browsers.Add(Enums.Browsers.Chrome, new ChromeBrowser());
Browsers.Add(Enums.Browsers.Firefox, new FirefoxBrowser());
BrowserMapper.Add("Edge", Enums.Browsers.Edge);
BrowserMapper.Add("IE", Enums.Browsers.IE);
BrowserMapper.Add("Internet Explorer", Enums.Browsers.IE);
BrowserMapper.Add("Chrome", Enums.Browsers.Chrome);
BrowserMapper.Add("Firefox", Enums.Browsers.Firefox);
BrowserMapper.Add("edge", Enums.Browsers.Edge);
BrowserMapper.Add("ie", Enums.Browsers.IE);
BrowserMapper.Add("internet explorer", Enums.Browsers.IE);
BrowserMapper.Add("chrome", Enums.Browsers.Chrome);
BrowserMapper.Add("firefox", Enums.Browsers.Firefox);
BrowserMapper.Add("internetexplorer", Enums.Browsers.IE);
BrowserMapper.Add("InternetExplorer", Enums.Browsers.IE);
}
public WebDriver(AppSettingsConfiguration appSettingsConfiguration)
{
_AppSettingsConfiguration = appSettingsConfiguration;
}
public IWebDriver GetWebDriver(string browser)
{
var browserName = BrowserMapper[browser];
return Browsers[browserName].GetWebDriver(_AppSettingsConfiguration.GetConfiguration("WebDriverFolderPath"));
}
}
public void Initialize()
{
if (WebDriver == null)
{
WebDriver = new WebDriver(new AppSettingsConfiguration()).GetWebDriver(BaseData.Browser);
}
}
GetWebDriver()
could just use theBrowsers
enumeration to avoid having to create duplicate mappings like"internetexplorer", "InternetExplorer", and "internet explorer"
. \$\endgroup\$