diff --git a/EATestFramework/Driver/BrowserDriver.cs b/EATestFramework/Driver/BrowserDriver.cs
new file mode 100644
index 0000000..2935d48
--- /dev/null
+++ b/EATestFramework/Driver/BrowserDriver.cs
@@ -0,0 +1,28 @@
+using OpenQA.Selenium;
+using OpenQA.Selenium.Chrome;
+using OpenQA.Selenium.Firefox;
+using WebDriverManager;
+using WebDriverManager.DriverConfigs.Impl;
+
+namespace EATestFramework.Driver;
+
+public class BrowserDriver : IBrowserDriver
+{
+ public IWebDriver GetChromeDriver()
+ {
+ new DriverManager().SetUpDriver(new ChromeConfig());
+ return new ChromeDriver();
+ }
+
+ public IWebDriver GetFirefoxDriver()
+ {
+ new DriverManager().SetUpDriver(new FirefoxConfig());
+ return new FirefoxDriver();
+ }
+}
+
+public enum BrowserType
+{
+ Chrome,
+ Firefox
+}
\ No newline at end of file
diff --git a/EATestFramework/Driver/DriverFixture.cs b/EATestFramework/Driver/DriverFixture.cs
new file mode 100644
index 0000000..6535b41
--- /dev/null
+++ b/EATestFramework/Driver/DriverFixture.cs
@@ -0,0 +1,34 @@
+using EATestFramework.Settings;
+using OpenQA.Selenium;
+
+namespace EATestFramework.Driver
+{
+
+ public class DriverFixture : IDriverFixture
+ {
+ IWebDriver driver;
+ private readonly TestSettings _testSettings;
+ private readonly IBrowserDriver _browserDriver;
+
+ public DriverFixture(TestSettings testSettings, IBrowserDriver browserDriver)
+ {
+ _testSettings = testSettings;
+ _browserDriver = browserDriver;
+ driver = GetWebDriver();
+
+ }
+
+ public IWebDriver Driver => driver;
+
+ public IWebDriver GetWebDriver()
+ {
+ return _testSettings.BrowserType switch
+ {
+ BrowserType.Chrome => _browserDriver.GetChromeDriver(),
+ BrowserType.Firefox => _browserDriver.GetFirefoxDriver(),
+ _ => _browserDriver.GetChromeDriver()
+ };
+ }
+
+ }
+}
diff --git a/EATestFramework/Driver/IBrowserDriver.cs b/EATestFramework/Driver/IBrowserDriver.cs
new file mode 100644
index 0000000..20eb5d6
--- /dev/null
+++ b/EATestFramework/Driver/IBrowserDriver.cs
@@ -0,0 +1,9 @@
+using OpenQA.Selenium;
+
+namespace EATestFramework.Driver;
+
+public interface IBrowserDriver
+{
+ IWebDriver GetChromeDriver();
+ IWebDriver GetFirefoxDriver();
+}
diff --git a/EATestFramework/Driver/IDriverFixture.cs b/EATestFramework/Driver/IDriverFixture.cs
new file mode 100644
index 0000000..2b8ab7f
--- /dev/null
+++ b/EATestFramework/Driver/IDriverFixture.cs
@@ -0,0 +1,10 @@
+using OpenQA.Selenium;
+
+namespace EATestFramework.Driver
+{
+ public interface IDriverFixture
+ {
+ IWebDriver Driver { get; }
+
+ }
+}
diff --git a/EATestFramework/Driver/WebDriverInitializerExtension.cs b/EATestFramework/Driver/WebDriverInitializerExtension.cs
new file mode 100644
index 0000000..c07690e
--- /dev/null
+++ b/EATestFramework/Driver/WebDriverInitializerExtension.cs
@@ -0,0 +1,19 @@
+using EATestFramework.Settings;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace EATestFramework.Driver;
+public static class WebDriverInitializerExtension
+{
+ public static IServiceCollection UseWebDriverInitializer(
+ this IServiceCollection services,
+ BrowserType browserType)
+ {
+ services.AddSingleton(new TestSettings
+ {
+ BrowserType = browserType
+ });
+
+ return services;
+ }
+}
+
diff --git a/EATestFramework/EATestFramework.csproj b/EATestFramework/EATestFramework.csproj
new file mode 100644
index 0000000..30fa7a8
--- /dev/null
+++ b/EATestFramework/EATestFramework.csproj
@@ -0,0 +1,27 @@
+
+
+
+ net6.0
+ enable
+
+ false
+
+
+
+
+
+
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+
+
diff --git a/EATestFramework/Settings/TestSettings.cs b/EATestFramework/Settings/TestSettings.cs
new file mode 100644
index 0000000..bee7673
--- /dev/null
+++ b/EATestFramework/Settings/TestSettings.cs
@@ -0,0 +1,9 @@
+using EATestFramework.Driver;
+
+namespace EATestFramework.Settings
+{
+ public class TestSettings
+ {
+ public BrowserType BrowserType { get; set; }
+ }
+}
diff --git a/EATestFramework/Startup.cs b/EATestFramework/Startup.cs
new file mode 100644
index 0000000..771a46c
--- /dev/null
+++ b/EATestFramework/Startup.cs
@@ -0,0 +1,15 @@
+using EATestFramework.Driver;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace EATestFramework
+{
+ public class Startup
+ {
+ public void ConfigureServices(IServiceCollection services)
+ {
+ services.UseWebDriverInitializer(BrowserType.Firefox);
+ services.AddScoped();
+ services.AddScoped();
+ }
+ }
+}
diff --git a/EATestProject/EATestProject.csproj b/EATestProject/EATestProject.csproj
new file mode 100644
index 0000000..141e5bc
--- /dev/null
+++ b/EATestProject/EATestProject.csproj
@@ -0,0 +1,31 @@
+
+
+
+ net6.0
+ enable
+
+ false
+
+
+
+
+
+
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+
+
+
+
+
+
diff --git a/EATestProject/Model/Product.cs b/EATestProject/Model/Product.cs
new file mode 100644
index 0000000..e26e9d9
--- /dev/null
+++ b/EATestProject/Model/Product.cs
@@ -0,0 +1,19 @@
+namespace EATestProject.Model
+{
+ public class Product
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public string Description { get; set; }
+ public int Price { get; set; }
+ public ProductType ProductType { get; set; }
+ }
+
+ public enum ProductType
+ {
+ CPU,
+ MONITOR,
+ PERIPHARALS,
+ EXTERNAL
+ }
+}
diff --git a/EATestProject/Pages/CreateProductPage.cs b/EATestProject/Pages/CreateProductPage.cs
new file mode 100644
index 0000000..ea40c79
--- /dev/null
+++ b/EATestProject/Pages/CreateProductPage.cs
@@ -0,0 +1,35 @@
+using EATestFramework.Driver;
+using EATestProject.Model;
+using OpenQA.Selenium;
+using OpenQA.Selenium.Support.UI;
+
+namespace EATestProject.Pages
+{
+ public interface ICreateProductPage
+ {
+ void EnterProductDetails(Product product);
+ }
+
+ public class CreateProductPage : ICreateProductPage
+ {
+ private readonly IWebDriver _driver;
+ public CreateProductPage(IDriverFixture driver) => _driver = driver.Driver;
+
+ IWebElement txtName => _driver.FindElement(By.Id("Name"));
+ IWebElement txtDescription => _driver.FindElement(By.Id("Description"));
+ IWebElement txtPrice => _driver.FindElement(By.Id("Price"));
+ IWebElement ddlProductType => _driver.FindElement(By.Id("ProductType"));
+ IWebElement btnCreate => _driver.FindElement(By.Id("Create"));
+
+ public void EnterProductDetails(Product product)
+ {
+ txtName.SendKeys(product.Name);
+ txtDescription.SendKeys(product.Description);
+ txtPrice.SendKeys(product.Price.ToString());
+ var select = new SelectElement(ddlProductType);
+ select.SelectByText(product.ProductType.ToString());
+ btnCreate.Click();
+ }
+
+ }
+}
diff --git a/EATestProject/Pages/HomePage.cs b/EATestProject/Pages/HomePage.cs
new file mode 100644
index 0000000..d530477
--- /dev/null
+++ b/EATestProject/Pages/HomePage.cs
@@ -0,0 +1,28 @@
+using EATestFramework.Driver;
+using OpenQA.Selenium;
+
+namespace EATestProject.Pages
+{
+ public interface IHomePage
+ {
+ void CreateProduct();
+ }
+
+ public class HomePage : IHomePage
+ {
+ private readonly IWebDriver _driver;
+ public HomePage(IDriverFixture driver)
+ {
+ _driver = driver.Driver;
+ }
+
+ IWebElement lnkProduct => _driver.FindElement(By.LinkText("Product"));
+ IWebElement lnkCreate => _driver.FindElement(By.LinkText("Create"));
+
+ public void CreateProduct()
+ {
+ lnkProduct.Click();
+ lnkCreate.Click();
+ }
+ }
+}
diff --git a/EATestProject/Startup.cs b/EATestProject/Startup.cs
new file mode 100644
index 0000000..c07eeb9
--- /dev/null
+++ b/EATestProject/Startup.cs
@@ -0,0 +1,18 @@
+using EATestFramework.Driver;
+using EATestProject.Pages;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace EATestProject
+{
+ public class Startup
+ {
+ public void ConfigureServices(IServiceCollection services)
+ {
+ services.UseWebDriverInitializer(BrowserType.Firefox);
+ services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
+ }
+ }
+}
diff --git a/EATestProject/UnitTest1.cs b/EATestProject/UnitTest1.cs
new file mode 100644
index 0000000..b81517f
--- /dev/null
+++ b/EATestProject/UnitTest1.cs
@@ -0,0 +1,43 @@
+using EATestFramework.Driver;
+using EATestProject.Model;
+using EATestProject.Pages;
+using OpenQA.Selenium;
+using System;
+using Xunit;
+
+namespace EATestProject
+{
+ public class UnitTest1: IDisposable
+ {
+ private readonly IWebDriver _driver;
+ private readonly IHomePage _homePage;
+ private readonly ICreateProductPage _createProductPage;
+
+ public UnitTest1(IDriverFixture driver, IHomePage homePage, ICreateProductPage createProductPage)
+ {
+ _homePage = homePage;
+ _createProductPage = createProductPage;
+ _driver = driver.Driver;
+ _driver.Navigate().GoToUrl(new Uri("http://localhost:33084"));
+ }
+
+ public void Dispose()
+ {
+ _driver.Quit();
+ }
+
+ [Fact]
+ public void Test1()
+ {
+
+ _homePage.CreateProduct();
+ _createProductPage.EnterProductDetails(new Product
+ {
+ Name = "AutoProduct",
+ Description = "AutoDescription",
+ Price = 7675,
+ ProductType = ProductType.PERIPHARALS
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/SeleniumXunitBasic.sln b/SeleniumXunitBasic.sln
new file mode 100644
index 0000000..233836b
--- /dev/null
+++ b/SeleniumXunitBasic.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.32014.148
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EATestFramework", "EATestFramework\EATestFramework.csproj", "{AE40E966-4FE5-4937-B90D-AEE4277936FE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EATestProject", "EATestProject\EATestProject.csproj", "{A3565A74-D82B-4B9B-BE5A-9CABE628D163}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {AE40E966-4FE5-4937-B90D-AEE4277936FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AE40E966-4FE5-4937-B90D-AEE4277936FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AE40E966-4FE5-4937-B90D-AEE4277936FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AE40E966-4FE5-4937-B90D-AEE4277936FE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A3565A74-D82B-4B9B-BE5A-9CABE628D163}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A3565A74-D82B-4B9B-BE5A-9CABE628D163}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A3565A74-D82B-4B9B-BE5A-9CABE628D163}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A3565A74-D82B-4B9B-BE5A-9CABE628D163}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {CB3A58BA-7DD8-4FC9-ADE7-09629DC6E361}
+ EndGlobalSection
+EndGlobal