TagPagePom.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using Microsoft.Playwright;
  2. namespace Tests.E2e.PageObjectModels;
  3. /// <summary>
  4. /// The /tags/{TagName} detail page — everything carrying one tag.
  5. /// Distinct from <see cref="TagsPom" />, which drives the tag editor on a
  6. /// resource card.
  7. /// </summary>
  8. public class TagPagePom(IPage page) {
  9. public ILocator Root
  10. => page.GetByTestId("tag-page-root");
  11. public ILocator Title
  12. => page.GetByTestId("tag-page-title");
  13. public ILocator List
  14. => page.GetByTestId("tag-page-list");
  15. public ILocator Empty
  16. => page.GetByTestId("tag-page-empty");
  17. public ILocator Item(string resourceName)
  18. => page.GetByTestId($"tag-page-item-{resourceName.Replace(" ", "-")}");
  19. // -------------------------------------------------
  20. // High-Level Actions
  21. // -------------------------------------------------
  22. public async Task GotoAsync(string baseUrl, string tag) {
  23. await page.GotoAsync($"{baseUrl}/tags/{Uri.EscapeDataString(tag)}");
  24. await AssertLoadedAsync();
  25. }
  26. public async Task AssertLoadedAsync()
  27. => await Assertions.Expect(Root).ToBeVisibleAsync();
  28. public async Task AssertTitleContainsAsync(string tag)
  29. => await Assertions.Expect(Title).ToContainTextAsync(tag);
  30. public async Task AssertListsAsync(string resourceName)
  31. => await Assertions.Expect(Item(resourceName)).ToBeVisibleAsync();
  32. public async Task AssertDoesNotListAsync(string resourceName)
  33. => await Assertions.Expect(Item(resourceName)).ToHaveCountAsync(0);
  34. public async Task AssertEmptyAsync()
  35. => await Assertions.Expect(Empty).ToBeVisibleAsync();
  36. /// <summary>
  37. /// Follows the link on a listed resource through to its card.
  38. /// </summary>
  39. public async Task OpenResourceAsync(string resourceName) {
  40. await Item(resourceName).GetByRole(AriaRole.Link).First.ClickAsync();
  41. await page.WaitForURLAsync($"**/resources/**/{resourceName}");
  42. }
  43. }