RouterCardPom.cs 7.6 KB

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