LaptopListPom.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using Microsoft.Playwright;
  2. namespace Tests.E2e.PageObjectModels;
  3. public class LaptopListPom(IPage page) {
  4. public AddResourceComponent Addlaptop => new(page, "laptop");
  5. public ILocator PageRoot => page.GetByTestId("laptops-page-root");
  6. public ILocator PageTitle => page.GetByTestId("laptops-page-title");
  7. public ILocator Loading => page.GetByTestId("laptops-loading");
  8. public ILocator EmptyState => page.GetByTestId("laptops-empty");
  9. public ILocator LaptopsList => page.GetByTestId("laptops-list");
  10. public ILocator AddSection => page.GetByTestId("laptops-add-section");
  11. // Must match AddResourceComponent test IDs
  12. public ILocator AddInput => page.GetByTestId("add-laptop-input");
  13. public ILocator AddButton => page.GetByTestId("add-laptop-button");
  14. // -------------------------------------------------
  15. // Dynamic laptop Items
  16. // -------------------------------------------------
  17. public ILocator LaptopItem(string name) => page.GetByTestId($"laptop-item-{Sanitize(name)}");
  18. public ILocator OpenLink(string name) {
  19. return LaptopItem(name)
  20. .GetByTestId("open-laptop-link");
  21. }
  22. public ILocator DeleteButton(string name) {
  23. return LaptopItem(name)
  24. .GetByTestId("delete-laptop-button");
  25. }
  26. public ILocator RenameButton(string name) {
  27. return LaptopItem(name)
  28. .GetByTestId("rename-laptop-button");
  29. }
  30. public ILocator CloneButton(string name) {
  31. return LaptopItem(name)
  32. .GetByTestId("clone-laptop-button");
  33. }
  34. public ILocator ModelBadge(string name) {
  35. return LaptopItem(name)
  36. .GetByTestId("laptop-model-badge");
  37. }
  38. // -------------------------------------------------
  39. // Navigation
  40. // -------------------------------------------------
  41. public async Task GotoAsync(string baseUrl) {
  42. await page.GotoAsync($"{baseUrl}/laptops/list");
  43. await AssertLoadedAsync();
  44. }
  45. public async Task AssertLoadedAsync() {
  46. await Assertions.Expect(PageRoot).ToBeVisibleAsync();
  47. await Assertions.Expect(PageTitle).ToBeVisibleAsync();
  48. }
  49. public async Task WaitForListAsync() => await Assertions.Expect(LaptopsList).ToBeVisibleAsync();
  50. // -------------------------------------------------
  51. // Actions
  52. // -------------------------------------------------
  53. public async Task AddLaptopAsync(string name) {
  54. await Addlaptop.AddAsync(name);
  55. await Assertions.Expect(LaptopItem(name))
  56. .ToBeVisibleAsync();
  57. }
  58. public async Task DeleteLaptopAsync(string name) {
  59. await DeleteButton(name).ClickAsync();
  60. await page.GetByTestId("Laptop-confirm-modal-confirm").ClickAsync();
  61. await Assertions.Expect(LaptopItem(name))
  62. .Not.ToBeVisibleAsync();
  63. }
  64. public async Task OpenLaptopAsync(string name) {
  65. await OpenLink(name).ClickAsync();
  66. await page.WaitForURLAsync($"**/resources/hardware/{name}");
  67. }
  68. public async Task AssertLaptopExists(string name) {
  69. await Assertions.Expect(LaptopItem(name))
  70. .ToBeVisibleAsync();
  71. }
  72. public async Task AssertLaptopDoesNotExist(string name) {
  73. await Assertions.Expect(LaptopItem(name))
  74. .Not.ToBeVisibleAsync();
  75. }
  76. private static string Sanitize(string value) => value.Replace(" ", "-");
  77. }