RouterListPom.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using Microsoft.Playwright;
  2. namespace Tests.E2e.PageObjectModels;
  3. public class RouterListPom(IPage page)
  4. {
  5. public AddResourceComponent AddRouter => new(page, "router");
  6. public ILocator PageRoot => page.GetByTestId("routers-page-root");
  7. public ILocator PageTitle => page.GetByTestId("routers-page-title");
  8. public ILocator Loading => page.GetByTestId("routers-loading");
  9. public ILocator EmptyState => page.GetByTestId("routers-empty");
  10. public ILocator RoutersList => page.GetByTestId("routers-list");
  11. public ILocator AddSection => page.GetByTestId("routers-add-section");
  12. // Must match AddResourceComponent test IDs
  13. public ILocator AddInput => page.GetByTestId("add-router-input");
  14. public ILocator AddButton => page.GetByTestId("add-router-button");
  15. // -------------------------------------------------
  16. // Dynamic Router Items
  17. // -------------------------------------------------
  18. public ILocator RouterItem(string name)
  19. {
  20. return page.GetByTestId($"router-item-{Sanitize(name)}");
  21. }
  22. public ILocator OpenLink(string name)
  23. => page.GetByTestId($"router-item-{Sanitize(name)}-link");
  24. public ILocator EditButton(string name)
  25. {
  26. return RouterItem(name)
  27. .GetByTestId("edit-router-button");
  28. }
  29. public ILocator SaveButton(string name)
  30. {
  31. return RouterItem(name)
  32. .GetByTestId("save-router-button");
  33. }
  34. public ILocator CancelButton(string name)
  35. {
  36. return RouterItem(name)
  37. .GetByTestId("cancel-router-button");
  38. }
  39. public ILocator RenameButton(string name)
  40. {
  41. return RouterItem(name)
  42. .GetByTestId("rename-router-button");
  43. }
  44. public ILocator CloneButton(string name)
  45. {
  46. return RouterItem(name)
  47. .GetByTestId("clone-router-button");
  48. }
  49. public ILocator DeleteButton(string name)
  50. {
  51. return RouterItem(name)
  52. .GetByTestId("delete-router-button");
  53. }
  54. // -------------------------------------------------
  55. // Navigation
  56. // -------------------------------------------------
  57. public async Task GotoAsync(string baseUrl)
  58. {
  59. await page.GotoAsync($"{baseUrl}/routers/list");
  60. await AssertLoadedAsync();
  61. }
  62. public async Task AssertLoadedAsync()
  63. {
  64. await Assertions.Expect(PageRoot).ToBeVisibleAsync();
  65. await Assertions.Expect(PageTitle).ToBeVisibleAsync();
  66. }
  67. public async Task WaitForListAsync()
  68. {
  69. await Assertions.Expect(RoutersList).ToBeVisibleAsync();
  70. }
  71. // -------------------------------------------------
  72. // Actions
  73. // -------------------------------------------------
  74. public async Task AddRouterAsync(string name)
  75. {
  76. await AddRouter.AddAsync(name);
  77. await Assertions.Expect(RouterItem(name))
  78. .ToBeVisibleAsync();
  79. }
  80. public async Task DeleteRouterAsync(string name)
  81. {
  82. await DeleteButton(name).ClickAsync();
  83. await page.GetByTestId("Router-confirm-modal-confirm").ClickAsync();
  84. await Assertions.Expect(RouterItem(name))
  85. .Not.ToBeVisibleAsync();
  86. }
  87. public async Task OpenRouterAsync(string name)
  88. {
  89. await OpenLink(name).ClickAsync();
  90. await page.WaitForURLAsync($"**/resources/hardware/{name}");
  91. }
  92. public async Task AssertRouterExists(string name)
  93. {
  94. await Assertions.Expect(RouterItem(name))
  95. .ToBeVisibleAsync();
  96. }
  97. public async Task AssertRouterDoesNotExist(string name)
  98. {
  99. await Assertions.Expect(RouterItem(name))
  100. .Not.ToBeVisibleAsync();
  101. }
  102. private static string Sanitize(string value)
  103. {
  104. return value.Replace(" ", "-");
  105. }
  106. }