4
0

RouterCardPom.cs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. using Microsoft.Playwright;
  2. namespace Tests.E2e.PageObjectModels;
  3. public class RouterCardPom(IPage page) {
  4. public TagsPom Tags => new(page);
  5. public LabelsPom Labels => new(page);
  6. // -------------------------------------------------
  7. // Dynamic Router Item (root)
  8. // -------------------------------------------------
  9. public ILocator RouterItem(string name)
  10. => page.GetByTestId($"router-item-{Sanitize(name)}");
  11. public ILocator OpenLink(string name)
  12. => page.GetByTestId($"router-item-{Sanitize(name)}-link");
  13. // -------------------------------------------------
  14. // Header Actions
  15. // -------------------------------------------------
  16. public ILocator EditButton(string name)
  17. => RouterItem(name).GetByTestId("edit-router-button");
  18. public ILocator SaveButton(string name)
  19. => RouterItem(name).GetByTestId("save-router-button");
  20. public ILocator CancelButton(string name)
  21. => RouterItem(name).GetByTestId("cancel-router-button");
  22. public ILocator RenameButton(string name)
  23. => RouterItem(name).GetByTestId("rename-router-button");
  24. public ILocator CloneButton(string name)
  25. => RouterItem(name).GetByTestId("clone-router-button");
  26. public ILocator DeleteButton(string name)
  27. => RouterItem(name).GetByTestId("delete-router-button");
  28. // -------------------------------------------------
  29. // Model
  30. // -------------------------------------------------
  31. public ILocator ModelSection(string name)
  32. => RouterItem(name).GetByTestId("router-model-section");
  33. public ILocator ModelInput(string name)
  34. => RouterItem(name).GetByTestId("router-model-input");
  35. public ILocator ModelValue(string name)
  36. => RouterItem(name).GetByTestId("router-model-value");
  37. // -------------------------------------------------
  38. // Features
  39. // -------------------------------------------------
  40. public ILocator FeaturesSection(string name)
  41. => RouterItem(name).GetByTestId("router-features-section");
  42. public ILocator ManagedCheckbox(string name)
  43. => RouterItem(name).GetByTestId("router-managed-checkbox");
  44. public ILocator PoeCheckbox(string name)
  45. => RouterItem(name).GetByTestId("router-poe-checkbox");
  46. public ILocator ManagedBadge(string name)
  47. => RouterItem(name).GetByTestId("router-managed-badge");
  48. public ILocator PoeBadge(string name)
  49. => RouterItem(name).GetByTestId("router-poe-badge");
  50. // -------------------------------------------------
  51. // Ports
  52. // -------------------------------------------------
  53. public ILocator PortsSection(string name)
  54. => RouterItem(name).GetByTestId("router-ports-section");
  55. public ILocator AddPortButton(string name)
  56. => RouterItem(name).GetByTestId("add-port-button");
  57. public ILocator EditPortButton(string routerName, string portType, double portSpeed)
  58. => RouterItem(routerName).GetByTestId($"edit-port-{portType}-{portSpeed}");
  59. // -------------------------------------------------
  60. // Notes (Markdown)
  61. // -------------------------------------------------
  62. public ILocator NotesSection(string name)
  63. => RouterItem(name).GetByTestId("router-notes-section");
  64. // MarkdownViewer / MarkdownEditor now use TestIdPrefix internally
  65. public ILocator NotesViewerRoot(string name)
  66. => RouterItem(name).GetByTestId("router-notes-viewer");
  67. public ILocator NotesViewerContent(string name)
  68. => RouterItem(name).GetByTestId("router-notes-viewer-content");
  69. public ILocator NotesEditorRoot(string name)
  70. => RouterItem(name).GetByTestId("router-notes-editor");
  71. public ILocator NotesEditorTextarea(string name)
  72. => RouterItem(name).GetByTestId("router-notes-editor-textarea");
  73. public ILocator NotesEditorSave(string name)
  74. => RouterItem(name).GetByTestId("router-notes-editor-save");
  75. public ILocator NotesEditorCancel(string name)
  76. => RouterItem(name).GetByTestId("router-notes-editor-cancel");
  77. // -------------------------------------------------
  78. // Modals
  79. // -------------------------------------------------
  80. public ILocator DeleteConfirmConfirmButton()
  81. => page.GetByTestId("Router-confirm-modal-confirm");
  82. public ILocator DeleteConfirmCancelButton()
  83. => page.GetByTestId("Router-confirm-modal-cancel");
  84. // StringValueModal (rename)
  85. public ILocator RenameModal()
  86. => page.GetByTestId("router-rename-string-value-modal");
  87. public ILocator RenameInput()
  88. => page.GetByTestId("router-rename-string-value-modal-input");
  89. public ILocator RenameAccept()
  90. => page.GetByTestId("router-rename-string-value-modal-submit");
  91. public ILocator RenameCancel()
  92. => page.GetByTestId("router-rename-string-value-modal-cancel");
  93. // StringValueModal (clone)
  94. public ILocator CloneModal()
  95. => page.GetByTestId("router-clone-string-value-modal");
  96. public ILocator CloneInput()
  97. => page.GetByTestId("router-clone-string-value-modal-input");
  98. public ILocator CloneAccept()
  99. => page.GetByTestId("router-clone-string-value-modal-submit");
  100. public ILocator CloneCancel()
  101. => page.GetByTestId("router-clone-string-value-modal-cancel");
  102. // -------------------------------------------------
  103. // Navigation helpers
  104. // -------------------------------------------------
  105. public async Task OpenRouterAsync(string name) {
  106. await OpenLink(name).ClickAsync();
  107. await page.WaitForURLAsync($"**/resources/hardware/{name}");
  108. }
  109. // -------------------------------------------------
  110. // Actions
  111. // -------------------------------------------------
  112. public async Task DeleteRouterAsync(string name) {
  113. await DeleteButton(name).ClickAsync();
  114. await DeleteConfirmConfirmButton().ClickAsync();
  115. await Assertions.Expect(RouterItem(name)).Not.ToBeVisibleAsync();
  116. }
  117. public async Task RenameRouterAsync(string currentName, string newName) {
  118. await RenameButton(currentName).ClickAsync();
  119. await Assertions.Expect(RenameModal()).ToBeVisibleAsync();
  120. await RenameInput().FillAsync(newName);
  121. await RenameAccept().ClickAsync();
  122. await page.WaitForURLAsync($"**/resources/hardware/{newName}");
  123. await Assertions.Expect(RouterItem(newName)).ToBeVisibleAsync();
  124. }
  125. public async Task CloneRouterAsync(string currentName, string cloneName) {
  126. await CloneButton(currentName).ClickAsync();
  127. await Assertions.Expect(CloneModal()).ToBeVisibleAsync();
  128. await CloneInput().FillAsync(cloneName);
  129. await CloneAccept().ClickAsync();
  130. await page.WaitForURLAsync($"**/resources/hardware/{cloneName}");
  131. await Assertions.Expect(RouterItem(cloneName)).ToBeVisibleAsync();
  132. }
  133. public async Task EnterEditModeAsync(string name) {
  134. await EditButton(name).ClickAsync();
  135. await Assertions.Expect(ModelInput(name)).ToBeVisibleAsync();
  136. await Assertions.Expect(ManagedCheckbox(name)).ToBeVisibleAsync();
  137. await Assertions.Expect(PoeCheckbox(name)).ToBeVisibleAsync();
  138. }
  139. public async Task SaveEditsAsync(string name) {
  140. await SaveButton(name).ClickAsync();
  141. // back to view mode
  142. await Assertions.Expect(EditButton(name)).ToBeVisibleAsync();
  143. }
  144. public async Task CancelEditsAsync(string name) {
  145. await CancelButton(name).ClickAsync();
  146. // back to view mode
  147. await Assertions.Expect(EditButton(name)).ToBeVisibleAsync();
  148. }
  149. private static string Sanitize(string value) => value.Replace(" ", "-");
  150. }