diff --git a/.github/workflows/TestProjectWorkflow.yml b/.github/workflows/TestProjectWorkflow.yml
index a8d43b9..bebe11b 100644
--- a/.github/workflows/TestProjectWorkflow.yml
+++ b/.github/workflows/TestProjectWorkflow.yml
@@ -22,6 +22,19 @@ 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
+ google-chrome --version
+ which google-chrome
+
+ - name: Set up display
+ run: |
+ export DISPLAY=:99
+ Xvfb :99 -ac &
- name: Restore dependencies
run: dotnet restore
diff --git a/TestProject/TestProject/Core/Configuration.cs b/TestProject/TestProject/Core/Configuration.cs
index 9290ccf..c51e2ed 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,23 @@ public static string GetAppSettingsValue(string value, string defaultValue)
return configuration[$"{value}"] ?? defaultValue;
}
+
+ private static bool GetAppSettingsBoolValue(string value, bool defaultValue)
+ {
+ var builder = new ConfigurationBuilder()
+ .SetBasePath(Directory.GetCurrentDirectory())
+ .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
+
+ IConfigurationRoot configuration = builder.Build();
+
+ string configValue = configuration[$"{value}"];
+
+ if (bool.TryParse(configValue, 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..6421823 100644
--- a/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs
+++ b/TestProject/TestProject/Core/WebDriver/WebDriverFactory.cs
@@ -2,21 +2,38 @@
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()
+ {
+ /* 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}");
+ }
+
switch (browserType)
{
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");
+
+ // Add headless run option
+ if (Configuration.Headless)
+ {
+ options.AddArgument("--headless");
+ }
return new ChromeDriver(service, options, TimeSpan.FromSeconds(30));
}
case BrowserType.Edge:
@@ -28,10 +45,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..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(browserType);
+ WebDriverWrapper = new WebDriverWrapper();
WebDriverWrapper.StartBrowser();
WebDriverWrapper.NavigateTo(Configuration.AppUrl);
- Logger = Logger ?? new Logger();
+ Logger ??= new Logger();
}
[TearDown]
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