namespace Tests.Pages.BuildCalculator; public class ArmyComponent { private readonly Website _website; public ArmyComponent(Website website) => _website = website; public ILocator ArmyView => _website.Locator(".armyView"); public ILocator DisplayValue(string label) => _website.Locator(".displayContainer").Filter(new() { HasText = label }).Locator(".displayContent"); public ILocator ArmyCards => ArmyView.Locator(".armyCard"); public async Task GetArmyCompletedAtAsync() => (await DisplayValue("Army Completed At").TextContentAsync())?.Trim() ?? ""; public async Task GetArmyAttackingAtAsync() => (await DisplayValue("Army Attacking At").TextContentAsync())?.Trim() ?? ""; public async Task> GetArmyUnitNamesAsync() { var cards = await ArmyCards.AllAsync(); var names = new List(); foreach (var card in cards) { var text = (await card.InnerTextAsync()).Trim(); var match = System.Text.RegularExpressions.Regex.Match(text, @"\d+x\s*(.+)"); names.Add(match.Success ? match.Groups[1].Value.Trim() : text); } return names; } public async Task> GetArmyUnitCountsAsync() { var cards = await ArmyCards.AllAsync(); var counts = new List<(string, int)>(); foreach (var card in cards) { var countEl = card.Locator(".armyCount"); var nameEl = card.Locator("div").Last; var count = (await countEl.TextContentAsync())?.Replace("x", "").Trim() ?? "0"; var name = (await nameEl.TextContentAsync())?.Trim() ?? ""; counts.Add((name, int.Parse(count))); } return counts; } }