Code cleanup
This commit is contained in:
@@ -1,18 +1,18 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Selenium.WebDriver" Version="4.44.0" />
|
||||
<PackageReference Include="Selenium.Support" Version="4.44.0" />
|
||||
<PackageReference Include="NUnit" Version="4.6.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.2.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.5.1" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Selenium.WebDriver" Version="4.44.0"/>
|
||||
<PackageReference Include="Selenium.Support" Version="4.44.0"/>
|
||||
<PackageReference Include="NUnit" Version="4.6.1"/>
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.2.0"/>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.5.1"/>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
using System;
|
||||
using OpenQA.Selenium;
|
||||
using OpenQA.Selenium.Chrome;
|
||||
|
||||
@@ -10,10 +9,9 @@ public static class DriverFactory
|
||||
{
|
||||
var options = new ChromeOptions();
|
||||
var headless = Environment.GetEnvironmentVariable("HEADLESS");
|
||||
if (!string.IsNullOrEmpty(headless) && (headless == "1" || headless.Equals("true", StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
if (!string.IsNullOrEmpty(headless) &&
|
||||
(headless == "1" || headless.Equals("true", StringComparison.OrdinalIgnoreCase)))
|
||||
options.AddArgument("--headless=new");
|
||||
}
|
||||
|
||||
options.AddArgument("--disable-gpu");
|
||||
options.AddArgument("--no-sandbox");
|
||||
@@ -24,4 +22,4 @@ public static class DriverFactory
|
||||
|
||||
return new ChromeDriver(service, options);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,11 +5,15 @@ namespace AOW4.SeleniumTests.Pages;
|
||||
public class CounterPage
|
||||
{
|
||||
private readonly IWebDriver _driver;
|
||||
public CounterPage(IWebDriver driver) => _driver = driver;
|
||||
|
||||
public CounterPage(IWebDriver driver)
|
||||
{
|
||||
_driver = driver;
|
||||
}
|
||||
|
||||
public bool IsAt()
|
||||
{
|
||||
var url = _driver.Url ?? string.Empty;
|
||||
return url.Contains("counter", System.StringComparison.OrdinalIgnoreCase) || _driver.PageSource.Contains("Counter");
|
||||
return url.Contains("counter", StringComparison.OrdinalIgnoreCase) || _driver.PageSource.Contains("Counter");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,11 +5,16 @@ namespace AOW4.SeleniumTests.Pages;
|
||||
public class HomePage
|
||||
{
|
||||
private readonly IWebDriver _driver;
|
||||
public HomePage(IWebDriver driver) => _driver = driver;
|
||||
|
||||
public HomePage(IWebDriver driver)
|
||||
{
|
||||
_driver = driver;
|
||||
}
|
||||
|
||||
public bool IsAt()
|
||||
{
|
||||
var url = _driver.Url ?? string.Empty;
|
||||
return url.EndsWith("/") || url.Contains("/index", System.StringComparison.OrdinalIgnoreCase) || _driver.PageSource.Contains("Home");
|
||||
return url.EndsWith("/") || url.Contains("/index", StringComparison.OrdinalIgnoreCase) ||
|
||||
_driver.PageSource.Contains("Home");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
using System.Linq;
|
||||
using OpenQA.Selenium;
|
||||
|
||||
namespace AOW4.SeleniumTests.Pages;
|
||||
@@ -15,13 +14,12 @@ public class NavMenuPage
|
||||
public void ClickLinkByText(string linkText)
|
||||
{
|
||||
var link = _driver.FindElements(By.CssSelector("a[href]"))
|
||||
.FirstOrDefault(e => !string.IsNullOrWhiteSpace(e.Text) && e.Text.Trim().Equals(linkText, System.StringComparison.OrdinalIgnoreCase));
|
||||
.FirstOrDefault(e =>
|
||||
!string.IsNullOrWhiteSpace(e.Text) &&
|
||||
e.Text.Trim().Equals(linkText, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
if (link == null)
|
||||
{
|
||||
throw new NoSuchElementException($"Link with text '{linkText}' not found in the page.");
|
||||
}
|
||||
if (link == null) throw new NoSuchElementException($"Link with text '{linkText}' not found in the page.");
|
||||
|
||||
link.Click();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
using OpenQA.Selenium;
|
||||
|
||||
namespace AOW4.SeleniumTests.Pages;
|
||||
|
||||
public class WeatherPage
|
||||
{
|
||||
private readonly IWebDriver _driver;
|
||||
public WeatherPage(IWebDriver driver) => _driver = driver;
|
||||
|
||||
public bool IsAt()
|
||||
{
|
||||
var url = _driver.Url ?? string.Empty;
|
||||
return url.Contains("weather", System.StringComparison.OrdinalIgnoreCase) || _driver.PageSource.Contains("Weather");
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
# AOW4 Selenium Tests
|
||||
|
||||
Requirements:
|
||||
|
||||
- .NET 10 SDK
|
||||
- Google Chrome installed (compatible with ChromeDriver package)
|
||||
- The AOW4 web app running locally (by default at `http://localhost:5000`) or set `BASE_URL` env var.
|
||||
@@ -16,5 +17,6 @@ dotnet test AOW4.SeleniumTests\AOW4.SeleniumTests.csproj
|
||||
```
|
||||
|
||||
Notes:
|
||||
|
||||
- Navigation tests use the UI nav links — ensure the app is running before executing tests.
|
||||
- Broken links scanner sends HTTP HEAD requests and falls back to GET if needed.
|
||||
|
||||
@@ -1,15 +1,12 @@
|
||||
using AOW4.SeleniumTests.Driver;
|
||||
using NUnit.Framework;
|
||||
using OpenQA.Selenium;
|
||||
using AOW4.SeleniumTests.Driver;
|
||||
|
||||
namespace AOW4.SeleniumTests.Tests;
|
||||
|
||||
[TestFixture]
|
||||
public abstract class BaseTest
|
||||
{
|
||||
protected IWebDriver Driver = null!;
|
||||
protected string BaseUrl => "http://localhost:5212/";
|
||||
|
||||
[OneTimeSetUp]
|
||||
public void GlobalSetup()
|
||||
{
|
||||
@@ -29,8 +26,11 @@ public abstract class BaseTest
|
||||
}
|
||||
}
|
||||
|
||||
protected IWebDriver Driver = null!;
|
||||
protected string BaseUrl => "http://localhost:5212/";
|
||||
|
||||
protected void GoHome()
|
||||
{
|
||||
Driver.Navigate().GoToUrl(BaseUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,4 @@
|
||||
using NUnit.Framework;
|
||||
using System.Net.Http;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenQA.Selenium;
|
||||
|
||||
namespace AOW4.SeleniumTests.Tests;
|
||||
@@ -25,19 +22,16 @@ public class BrokenLinksTest : BaseTest
|
||||
|
||||
foreach (var raw in anchors)
|
||||
{
|
||||
if (raw.StartsWith("javascript:", System.StringComparison.OrdinalIgnoreCase))
|
||||
if (raw.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase))
|
||||
continue;
|
||||
if (raw.StartsWith("mailto:", System.StringComparison.OrdinalIgnoreCase))
|
||||
if (raw.StartsWith("mailto:", StringComparison.OrdinalIgnoreCase))
|
||||
continue;
|
||||
|
||||
System.Uri uri;
|
||||
Uri uri;
|
||||
try
|
||||
{
|
||||
uri = new System.Uri(raw, System.UriKind.RelativeOrAbsolute);
|
||||
if (!uri.IsAbsoluteUri)
|
||||
{
|
||||
uri = new System.Uri(new System.Uri(BaseUrl), raw);
|
||||
}
|
||||
uri = new Uri(raw, UriKind.RelativeOrAbsolute);
|
||||
if (!uri.IsAbsoluteUri) uri = new Uri(new Uri(BaseUrl), raw);
|
||||
}
|
||||
catch
|
||||
{
|
||||
@@ -54,21 +48,15 @@ public class BrokenLinksTest : BaseTest
|
||||
// try GET as fallback
|
||||
using var greq = new HttpRequestMessage(HttpMethod.Get, uri);
|
||||
var gresp = client.Send(greq);
|
||||
if (!gresp.IsSuccessStatusCode)
|
||||
{
|
||||
failures.Add($"{(int)gresp.StatusCode} {uri}");
|
||||
}
|
||||
if (!gresp.IsSuccessStatusCode) failures.Add($"{(int)gresp.StatusCode} {uri}");
|
||||
}
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
catch (Exception ex)
|
||||
{
|
||||
failures.Add($"Error checking {uri}: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
if (failures.Any())
|
||||
{
|
||||
Assert.Fail("Broken links found:\n" + string.Join("\n", failures));
|
||||
}
|
||||
if (failures.Any()) Assert.Fail("Broken links found:\n" + string.Join("\n", failures));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
using NUnit.Framework;
|
||||
using AOW4.SeleniumTests.Pages;
|
||||
|
||||
namespace AOW4.SeleniumTests.Tests;
|
||||
|
||||
@@ -11,7 +10,9 @@ public class NavigationTests : BaseTest
|
||||
{
|
||||
GoHome();
|
||||
|
||||
Assert.IsTrue(Driver.Url.Contains(expectedPath, System.StringComparison.OrdinalIgnoreCase) || Driver.PageSource.Contains(linkText),
|
||||
Assert.IsTrue(
|
||||
Driver.Url.Contains(expectedPath, StringComparison.OrdinalIgnoreCase) ||
|
||||
Driver.PageSource.Contains(linkText),
|
||||
$"Expected to be on route containing '{expectedPath}' after clicking '{linkText}', but was '{Driver.Url}'");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user