From aabebc3e1e33f8f6325805856c9ac66ef12c7e7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tommy=20=C3=96man?= Date: Thu, 27 Jan 2022 09:44:16 +0100 Subject: [PATCH] New way of reading configurations from file and deserializing --- EATestFramework/Driver/DriverFixture.cs | 1 + .../WebDriverInitializerExtension.cs | 31 +++++++++++++++---- EATestFramework/Settings/TestSettings.cs | 4 +++ EATestFramework/Startup.cs | 1 - EATestProject/EATestProject.csproj | 7 +++++ EATestProject/Startup.cs | 5 ++- EATestProject/UnitTest1.cs | 28 +++++++++++------ EATestProject/appsettings.json | 5 +++ 8 files changed, 64 insertions(+), 18 deletions(-) create mode 100644 EATestProject/appsettings.json diff --git a/EATestFramework/Driver/DriverFixture.cs b/EATestFramework/Driver/DriverFixture.cs index 6535b41..9117244 100644 --- a/EATestFramework/Driver/DriverFixture.cs +++ b/EATestFramework/Driver/DriverFixture.cs @@ -15,6 +15,7 @@ namespace EATestFramework.Driver _testSettings = testSettings; _browserDriver = browserDriver; driver = GetWebDriver(); + driver.Navigate().GoToUrl(_testSettings.ApplicationUrl); } diff --git a/EATestFramework/Extensions/WebDriverInitializerExtension.cs b/EATestFramework/Extensions/WebDriverInitializerExtension.cs index 6f7f019..8f89138 100644 --- a/EATestFramework/Extensions/WebDriverInitializerExtension.cs +++ b/EATestFramework/Extensions/WebDriverInitializerExtension.cs @@ -1,20 +1,39 @@ using EATestFramework.Driver; using EATestFramework.Settings; using Microsoft.Extensions.DependencyInjection; +using System.IO; +using System.Reflection; +using System.Text.Json; +using System.Text.Json.Serialization; namespace EATestFramework.Extensions; public static class WebDriverInitializerExtension { public static IServiceCollection UseWebDriverInitializer( - this IServiceCollection services, - BrowserType browserType) + this IServiceCollection services) { - services.AddSingleton(new TestSettings - { - BrowserType = browserType - }); + services.AddSingleton(ReadConfig()); return services; } + + private static TestSettings ReadConfig() + { + var configFile = File + .ReadAllText(Path.GetDirectoryName( + Assembly.GetExecutingAssembly().Location) + + "/appsettings.json"); + + var jsonSerializeOptions = new JsonSerializerOptions() + { + PropertyNameCaseInsensitive = true + }; + + jsonSerializeOptions.Converters.Add(new JsonStringEnumConverter()); + + var testSettings = JsonSerializer.Deserialize(configFile, jsonSerializeOptions); + + return testSettings; + } } diff --git a/EATestFramework/Settings/TestSettings.cs b/EATestFramework/Settings/TestSettings.cs index bee7673..bed742d 100644 --- a/EATestFramework/Settings/TestSettings.cs +++ b/EATestFramework/Settings/TestSettings.cs @@ -1,9 +1,13 @@ using EATestFramework.Driver; +using System; namespace EATestFramework.Settings { public class TestSettings { public BrowserType BrowserType { get; set; } + public Uri ApplicationUrl { get; set; } + + public int TimeoutInterval { get; set; } } } diff --git a/EATestFramework/Startup.cs b/EATestFramework/Startup.cs index dad2d45..2fed1e3 100644 --- a/EATestFramework/Startup.cs +++ b/EATestFramework/Startup.cs @@ -8,7 +8,6 @@ namespace EATestFramework { public void ConfigureServices(IServiceCollection services) { - services.UseWebDriverInitializer(BrowserType.Firefox); services.AddScoped(); services.AddScoped(); } diff --git a/EATestProject/EATestProject.csproj b/EATestProject/EATestProject.csproj index cf89dd1..d74b3d5 100644 --- a/EATestProject/EATestProject.csproj +++ b/EATestProject/EATestProject.csproj @@ -10,6 +10,7 @@ + @@ -30,4 +31,10 @@ + + + PreserveNewest + + + diff --git a/EATestProject/Startup.cs b/EATestProject/Startup.cs index 095d96f..60564d3 100644 --- a/EATestProject/Startup.cs +++ b/EATestProject/Startup.cs @@ -1,7 +1,9 @@ using EATestFramework.Driver; using EATestFramework.Extensions; using EATestProject.Pages; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using System; namespace EATestProject { @@ -9,7 +11,8 @@ namespace EATestProject { public void ConfigureServices(IServiceCollection services) { - services.UseWebDriverInitializer(BrowserType.Firefox); + + services.UseWebDriverInitializer(); services.AddScoped(); services.AddScoped(); services.AddScoped(); diff --git a/EATestProject/UnitTest1.cs b/EATestProject/UnitTest1.cs index a5caf7e..09ee459 100644 --- a/EATestProject/UnitTest1.cs +++ b/EATestProject/UnitTest1.cs @@ -8,23 +8,15 @@ using Xunit; namespace EATestProject { - public class UnitTest1: IDisposable + public class UnitTest1 { - private readonly IWebDriver _driver; private readonly IHomePage _homePage; private readonly ICreateProductPage _createProductPage; - public UnitTest1(IDriverFixture driver, IHomePage homePage, ICreateProductPage createProductPage) + public UnitTest1( IHomePage homePage, ICreateProductPage createProductPage) { _homePage = homePage; _createProductPage = createProductPage; - _driver = driver.Driver; - _driver.Navigate().GoToUrl(new Uri("http://localhost:33084")); - } - - public void Dispose() - { - _driver.Quit(); } [Theory,AutoData] @@ -43,5 +35,21 @@ namespace EATestProject _homePage.CreateProduct(); _createProductPage.EnterProductDetails(product); } + + [Theory, AutoData] + public void Test3(Product product) + { + + _homePage.CreateProduct(); + _createProductPage.EnterProductDetails(product); + } + + [Theory, AutoData] + public void Test4(Product product) + { + + _homePage.CreateProduct(); + _createProductPage.EnterProductDetails(product); + } } } \ No newline at end of file diff --git a/EATestProject/appsettings.json b/EATestProject/appsettings.json new file mode 100644 index 0000000..b118ef1 --- /dev/null +++ b/EATestProject/appsettings.json @@ -0,0 +1,5 @@ +{ + "BrowserType": "chrome", + "ApplicationUrl": "http://localhost:33084", + "TimeoutInterval": 30 +} \ No newline at end of file