RouterCardPom.cs 7.5 KB

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