Files
Berufsschule_HAM/tests/Berufsschule_HAM.E2ETests/Helper/AppHelper.cs
2025-11-09 22:39:12 +01:00

124 lines
3.6 KiB
C#

using System.Diagnostics;
using System.Net;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace Berufsschule_HAM.E2ETests.Helper;
public static class AppHelper
{
public const string ServerUrl = "http://localhost:5275";
public static Uri ServerUri = new(ServerUrl);
public static async Task<Process> StartApp(string appUrl)
{
var startInfo = new ProcessStartInfo
{
FileName = "/snap/bin/dotnet",
Arguments = "run --project ../../../../../src/",
WorkingDirectory = AppContext.BaseDirectory,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
};
startInfo.EnvironmentVariables["ASPNETCORE_ENVIRONMENT"] = "Development";
var process = new Process { StartInfo = startInfo };// Process process = Process.Start("/snap/bin/dotnet", "run -e Development");
process.Start();
using var client = new HttpClient();
for (int i = 0; i < 60; i++)
{
try
{
var response = await client.GetAsync(appUrl);
if (response.StatusCode == HttpStatusCode.OK)
{
return process;
}
else if (response.StatusCode != HttpStatusCode.RequestTimeout)
{
throw new Exception($"Server did not start properly? {response.StatusCode}");
}
}
catch (Exception) { }
Thread.Sleep(1000);
}
throw new Exception("Server did not start within 60 seconds");
}
public static ChromeDriver GetChromeDriver()
{
var options = new ChromeOptions();
//options.AddArgument("--headless");
return new ChromeDriver(options);
}
public static void Login(ChromeDriver driver)
{
driver.Navigate().GoToUrl(ServerUrl);
IWebElement username = driver.FindElement(By.Id("username"));
username.SendKeys("admin");
IWebElement password = driver.FindElement(By.Id("password"));
password.SendKeys("Test1234.");
IWebElement submit = driver.FindElement(By.CssSelector("button[type=\"submit\"]"));
submit.Click();
Thread.Sleep(250);
}
public static bool TryRetryFindSuccessToast(ChromeDriver driver)
{
int retryCounter = 0;
retry:
try
{
IWebElement successToast = driver.FindElement(By.CssSelector("#toastContainer div.bg-success"));
if (successToast.Displayed)
{
return true;
}
}
catch (Exception) { }
try
{
IWebElement failToast = driver.FindElement(By.CssSelector("#toastContainer div.bg-danger"));
if (failToast.Displayed)
{
return false;
}
}
catch (Exception) { }
if (++retryCounter < 5)
{
Thread.Sleep(250);
goto retry;
}
return false;
}
public static bool CheckboxGetState(IWebElement webElement)
{
return webElement.GetAttribute("checked") == "true";
}
public static void ScrollIntoViewAndClick(ChromeDriver driver, IWebElement webElement)
{
driver.ExecuteScript("arguments[0].scrollIntoView();", webElement);
int retryCounter = 0;
retry:
try
{
Thread.Sleep(250);
webElement.Click();
}
catch (Exception)
{
if (retryCounter++ < 20)
{
goto retry;
}
throw;
}
}
}