Add project files.

This commit is contained in:
2022-01-26 20:15:57 +01:00
parent 7d4796fa9f
commit 74cb6f043a
15 changed files with 356 additions and 0 deletions

View File

@ -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
}

View File

@ -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()
};
}
}
}

View File

@ -0,0 +1,9 @@
using OpenQA.Selenium;
namespace EATestFramework.Driver;
public interface IBrowserDriver
{
IWebDriver GetChromeDriver();
IWebDriver GetFirefoxDriver();
}

View File

@ -0,0 +1,10 @@
using OpenQA.Selenium;
namespace EATestFramework.Driver
{
public interface IDriverFixture
{
IWebDriver Driver { get; }
}
}

View File

@ -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;
}
}

View File

@ -0,0 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="Selenium.Support" Version="4.1.0" />
<PackageReference Include="Selenium.WebDriver" Version="4.1.0" />
<PackageReference Include="WebDriverManager" Version="2.12.3" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="Xunit.DependencyInjection" Version="8.3.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.1.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
</Project>

View File

@ -0,0 +1,9 @@
using EATestFramework.Driver;
namespace EATestFramework.Settings
{
public class TestSettings
{
public BrowserType BrowserType { get; set; }
}
}

View File

@ -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<IBrowserDriver, BrowserDriver>();
services.AddScoped<IDriverFixture, DriverFixture>();
}
}
}

View File

@ -0,0 +1,31 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="Selenium.Support" Version="4.1.0" />
<PackageReference Include="Selenium.WebDriver" Version="4.1.0" />
<PackageReference Include="WebDriverManager" Version="2.12.3" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="Xunit.DependencyInjection" Version="8.3.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.1.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\EATestFramework\EATestFramework.csproj" />
</ItemGroup>
</Project>

View File

@ -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
}
}

View File

@ -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();
}
}
}

View File

@ -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();
}
}
}

18
EATestProject/Startup.cs Normal file
View File

@ -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<IHomePage, HomePage>();
services.AddScoped<ICreateProductPage, CreateProductPage>();
services.AddScoped<IBrowserDriver, BrowserDriver>();
services.AddScoped<IDriverFixture, DriverFixture>();
}
}
}

View File

@ -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
});
}
}
}

31
SeleniumXunitBasic.sln Normal file
View File

@ -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