From 99eb0d0b99bcfe4643abc9af3577d50d16285d04 Mon Sep 17 00:00:00 2001 From: Viktar_Mikalayenka Date: Fri, 12 Jul 2024 15:13:13 +0300 Subject: [PATCH 1/6] ci adjustments --- TestProject/TestProject/Core/Configuration.cs | 17 +++++++++++++++++ .../Core/WebDriver/WebDriverFactory.cs | 19 ++++++++++++++++--- .../Core/WebDriver/WebDriverWrapperBrowser.cs | 4 ++-- TestProject/TestProject/TestProject.csproj | 1 - TestProject/TestProject/Tests/BaseTest.cs | 2 +- TestProject/TestProject/appsettings.json | 3 ++- 6 files changed, 38 insertions(+), 8 deletions(-) diff --git a/TestProject/TestProject/Core/Configuration.cs b/TestProject/TestProject/Core/Configuration.cs index 9290ccf..b16ea43 100644 --- a/TestProject/TestProject/Core/Configuration.cs +++ b/TestProject/TestProject/Core/Configuration.cs @@ -7,6 +7,7 @@ public class Configuration public static string BrowserType = GetAppSettingsValue("BrowserType", "Chrome"); public static string AppUrl = GetAppSettingsValue("ApplicationUrl", string.Empty); public static string TestDataPath = GetAppSettingsValue("TestDataPath", string.Empty); + public static bool Headless = GetAppSettingsBoolValue("Headless", false); public static string GetAppSettingsValue(string value, string defaultValue) { @@ -18,5 +19,21 @@ public static string GetAppSettingsValue(string value, string defaultValue) return configuration[$"{value}"] ?? defaultValue; } + + private static bool GetAppSettingsBoolValue(string key, bool defaultValue) + { + var builder = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); + + IConfigurationRoot configuration = builder.Build(); + + if (bool.TryParse(configuration[$"AppSettings:{key}"], out bool result)) + { + return result; + } + + return defaultValue; + } } } diff --git a/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs b/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs index 93ea9a1..2112606 100644 --- a/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs +++ b/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs @@ -2,13 +2,19 @@ using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Edge; using OpenQA.Selenium.Firefox; +using TestProject.Core; namespace TestProject.WebDriver { public static class WebDriverFactory { - public static IWebDriver CreateWebDriver(BrowserType browserType) - { + public static IWebDriver CreateWebDriver() + { + if (!Enum.TryParse(Configuration.BrowserType, true, out BrowserType browserType)) + { + throw new ArgumentException($"Unsupported browser type: {Configuration.BrowserType}"); + } + switch (browserType) { case BrowserType.Chrome: @@ -17,6 +23,12 @@ public static IWebDriver CreateWebDriver(BrowserType browserType) ChromeOptions options = new ChromeOptions(); options.AddArgument("disable-infobars"); options.AddArgument("--incognito"); + + // Add headless run option + if (Configuration.Headless) + { + options.AddArgument("--headless"); + } return new ChromeDriver(service, options, TimeSpan.FromSeconds(30)); } case BrowserType.Edge: @@ -28,10 +40,11 @@ public static IWebDriver CreateWebDriver(BrowserType browserType) } } } + public enum BrowserType { Chrome, Edge, Firefox } -} +} \ No newline at end of file diff --git a/TestProject/TestProject/Core/WebDriver/WebDriverWrapperBrowser.cs b/TestProject/TestProject/Core/WebDriver/WebDriverWrapperBrowser.cs index 286c4dc..7bd6d4c 100644 --- a/TestProject/TestProject/Core/WebDriver/WebDriverWrapperBrowser.cs +++ b/TestProject/TestProject/Core/WebDriver/WebDriverWrapperBrowser.cs @@ -10,9 +10,9 @@ public partial class WebDriverWrapper private const int WaitTimeInSeconds = 10; - public WebDriverWrapper(BrowserType browserType) + public WebDriverWrapper() { - _driver = WebDriverFactory.CreateWebDriver(browserType); + _driver = WebDriverFactory.CreateWebDriver(); _timeout = TimeSpan.FromSeconds(WaitTimeInSeconds); } diff --git a/TestProject/TestProject/TestProject.csproj b/TestProject/TestProject/TestProject.csproj index c96e94b..3ab25fd 100644 --- a/TestProject/TestProject/TestProject.csproj +++ b/TestProject/TestProject/TestProject.csproj @@ -27,7 +27,6 @@ - diff --git a/TestProject/TestProject/Tests/BaseTest.cs b/TestProject/TestProject/Tests/BaseTest.cs index 3c90066..6589218 100644 --- a/TestProject/TestProject/Tests/BaseTest.cs +++ b/TestProject/TestProject/Tests/BaseTest.cs @@ -16,7 +16,7 @@ public virtual void SetUp() var browserType = (BrowserType)Enum.Parse(typeof(BrowserType), Configuration.BrowserType); - WebDriverWrapper = new WebDriverWrapper(browserType); + WebDriverWrapper = new WebDriverWrapper(); WebDriverWrapper.StartBrowser(); WebDriverWrapper.NavigateTo(Configuration.AppUrl); diff --git a/TestProject/TestProject/appsettings.json b/TestProject/TestProject/appsettings.json index f7c5b09..4d86ade 100644 --- a/TestProject/TestProject/appsettings.json +++ b/TestProject/TestProject/appsettings.json @@ -1,5 +1,6 @@ { "BrowserType": "Chrome", "ApplicationUrl": "https://www.epam.com", - "TestDataPath": "Data\\TestData.json" + "TestDataPath": "Data/TestData.json", + "Headless": true } \ No newline at end of file From 0bb726b2854e59a1c09f4f0c567d5920b1bfe168 Mon Sep 17 00:00:00 2001 From: Viktar Mikalayenka Date: Fri, 12 Jul 2024 15:18:17 +0300 Subject: [PATCH 2/6] Update TestProjectWorkflow.yml --- .github/workflows/TestProjectWorkflow.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/TestProjectWorkflow.yml b/.github/workflows/TestProjectWorkflow.yml index a8d43b9..de775de 100644 --- a/.github/workflows/TestProjectWorkflow.yml +++ b/.github/workflows/TestProjectWorkflow.yml @@ -22,6 +22,17 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: '7.0.x' + + - name: Install Chrome dependencies + run: | + sudo apt-get update + sudo apt-get install -y wget unzip xvfb libxi6 libgconf-2-4 + sudo apt-get install -y google-chrome-stable + + - name: Set up display + run: | + export DISPLAY=:99 + Xvfb :99 -ac & - name: Restore dependencies run: dotnet restore From 709e43ef13fed8063b68b4b8330eeca498b3b086 Mon Sep 17 00:00:00 2001 From: Viktar_Mikalayenka Date: Fri, 12 Jul 2024 15:22:32 +0300 Subject: [PATCH 3/6] added browser options to the factory --- TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs b/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs index 2112606..f052629 100644 --- a/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs +++ b/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs @@ -23,6 +23,8 @@ public static IWebDriver CreateWebDriver() ChromeOptions options = new ChromeOptions(); options.AddArgument("disable-infobars"); options.AddArgument("--incognito"); + options.AddArgument("--remote-debugging-port=9222"); + options.AddArgument("--no-sandbox"); // Add headless run option if (Configuration.Headless) From 1e5d63dab7f94ff66d3afed9e45bad3428f87b11 Mon Sep 17 00:00:00 2001 From: Viktar Mikalayenka Date: Fri, 12 Jul 2024 15:26:42 +0300 Subject: [PATCH 4/6] Update TestProjectWorkflow.yml --- .github/workflows/TestProjectWorkflow.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/TestProjectWorkflow.yml b/.github/workflows/TestProjectWorkflow.yml index de775de..bebe11b 100644 --- a/.github/workflows/TestProjectWorkflow.yml +++ b/.github/workflows/TestProjectWorkflow.yml @@ -28,6 +28,8 @@ jobs: sudo apt-get update sudo apt-get install -y wget unzip xvfb libxi6 libgconf-2-4 sudo apt-get install -y google-chrome-stable + google-chrome --version + which google-chrome - name: Set up display run: | From 992e56a5fe6e0382a4a3f94f1dc2918e4f7004dd Mon Sep 17 00:00:00 2001 From: Viktar_Mikalayenka Date: Sat, 13 Jul 2024 09:48:04 +0300 Subject: [PATCH 5/6] chrome options, removed option with bug on selenium side. --- TestProject/TestProject/Core/Configuration.cs | 2 +- TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/TestProject/TestProject/Core/Configuration.cs b/TestProject/TestProject/Core/Configuration.cs index b16ea43..9b56757 100644 --- a/TestProject/TestProject/Core/Configuration.cs +++ b/TestProject/TestProject/Core/Configuration.cs @@ -7,7 +7,7 @@ public class Configuration public static string BrowserType = GetAppSettingsValue("BrowserType", "Chrome"); public static string AppUrl = GetAppSettingsValue("ApplicationUrl", string.Empty); public static string TestDataPath = GetAppSettingsValue("TestDataPath", string.Empty); - public static bool Headless = GetAppSettingsBoolValue("Headless", false); + public static bool Headless = GetAppSettingsBoolValue("Headless", true); public static string GetAppSettingsValue(string value, string defaultValue) { diff --git a/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs b/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs index f052629..1fc82d4 100644 --- a/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs +++ b/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs @@ -21,9 +21,10 @@ public static IWebDriver CreateWebDriver() { var service = ChromeDriverService.CreateDefaultService(); ChromeOptions options = new ChromeOptions(); + options.AddArgument("--no-sandbox"); options.AddArgument("disable-infobars"); options.AddArgument("--incognito"); - options.AddArgument("--remote-debugging-port=9222"); + options.AddArgument("--disable-dev-shm-usage"); options.AddArgument("--no-sandbox"); // Add headless run option From d2d12025a3c49e14c4621b6a04df7678a08197ae Mon Sep 17 00:00:00 2001 From: Viktar_Mikalayenka Date: Sat, 13 Jul 2024 10:25:01 +0300 Subject: [PATCH 6/6] just some refactoring --- TestProject/TestProject/Core/Configuration.cs | 8 +++++--- .../TestProject/Core/WebDriver/WebDriverFactory.cs | 8 +++++--- TestProject/TestProject/Tests/BaseTest.cs | 6 +----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/TestProject/TestProject/Core/Configuration.cs b/TestProject/TestProject/Core/Configuration.cs index 9b56757..c51e2ed 100644 --- a/TestProject/TestProject/Core/Configuration.cs +++ b/TestProject/TestProject/Core/Configuration.cs @@ -7,7 +7,7 @@ public class Configuration public static string BrowserType = GetAppSettingsValue("BrowserType", "Chrome"); public static string AppUrl = GetAppSettingsValue("ApplicationUrl", string.Empty); public static string TestDataPath = GetAppSettingsValue("TestDataPath", string.Empty); - public static bool Headless = GetAppSettingsBoolValue("Headless", true); + public static bool Headless = GetAppSettingsBoolValue("Headless", false); public static string GetAppSettingsValue(string value, string defaultValue) { @@ -20,7 +20,7 @@ public static string GetAppSettingsValue(string value, string defaultValue) return configuration[$"{value}"] ?? defaultValue; } - private static bool GetAppSettingsBoolValue(string key, bool defaultValue) + private static bool GetAppSettingsBoolValue(string value, bool defaultValue) { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) @@ -28,7 +28,9 @@ private static bool GetAppSettingsBoolValue(string key, bool defaultValue) IConfigurationRoot configuration = builder.Build(); - if (bool.TryParse(configuration[$"AppSettings:{key}"], out bool result)) + string configValue = configuration[$"{value}"]; + + if (bool.TryParse(configValue, out bool result)) { return result; } diff --git a/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs b/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs index 1fc82d4..6421823 100644 --- a/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs +++ b/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs @@ -9,7 +9,10 @@ namespace TestProject.WebDriver public static class WebDriverFactory { public static IWebDriver CreateWebDriver() - { + { + /* TODO: @Aleh or @Valiantsina, + * please take a look on this condition, just took browser from configuration, and as out param we are getting enum. + */ if (!Enum.TryParse(Configuration.BrowserType, true, out BrowserType browserType)) { throw new ArgumentException($"Unsupported browser type: {Configuration.BrowserType}"); @@ -20,12 +23,11 @@ public static IWebDriver CreateWebDriver() case BrowserType.Chrome: { var service = ChromeDriverService.CreateDefaultService(); - ChromeOptions options = new ChromeOptions(); + ChromeOptions options = new(); options.AddArgument("--no-sandbox"); options.AddArgument("disable-infobars"); options.AddArgument("--incognito"); options.AddArgument("--disable-dev-shm-usage"); - options.AddArgument("--no-sandbox"); // Add headless run option if (Configuration.Headless) diff --git a/TestProject/TestProject/Tests/BaseTest.cs b/TestProject/TestProject/Tests/BaseTest.cs index 6589218..2ba9676 100644 --- a/TestProject/TestProject/Tests/BaseTest.cs +++ b/TestProject/TestProject/Tests/BaseTest.cs @@ -1,7 +1,6 @@ using NUnit.Framework; using TestProject.Core; using TestProject.Core.WebDriver; -using TestProject.WebDriver; namespace TestProject.TestsUI { @@ -13,14 +12,11 @@ public abstract class BaseTest [SetUp] public virtual void SetUp() { - var browserType = (BrowserType)Enum.Parse(typeof(BrowserType), - Configuration.BrowserType); - WebDriverWrapper = new WebDriverWrapper(); WebDriverWrapper.StartBrowser(); WebDriverWrapper.NavigateTo(Configuration.AppUrl); - Logger = Logger ?? new Logger(); + Logger ??= new Logger(); } [TearDown]