AccessPointCardPom.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. namespace Tests.E2e.PageObjectModels;
  2. using Microsoft.Playwright;
  3. public class AccessPointCardPom(IPage page)
  4. {
  5. public TagsPom Tags => new(page);
  6. public LabelsPom Labels => new(page);
  7. // Root
  8. public ILocator Card(string accessPointName)
  9. => page.GetByTestId($"accesspoint-item-{Sanitize(accessPointName)}");
  10. // Link / navigation
  11. public ILocator OpenLink(string accessPointName)
  12. => Card(accessPointName).GetByTestId("open-accesspoint-link");
  13. // Top-right actions (view mode)
  14. public ILocator EditButton(string accessPointName)
  15. => Card(accessPointName).GetByTestId("edit-accesspoint-button");
  16. public ILocator RenameButton(string accessPointName)
  17. => Card(accessPointName).GetByTestId("rename-accesspoint-button");
  18. public ILocator CloneButton(string accessPointName)
  19. => Card(accessPointName).GetByTestId("clone-accesspoint-button");
  20. public ILocator DeleteButton(string accessPointName)
  21. => Card(accessPointName).GetByTestId("delete-accesspoint-button");
  22. // Top-right actions (edit mode)
  23. public ILocator SaveButton(string accessPointName)
  24. => Card(accessPointName).GetByTestId("save-accesspoint-button");
  25. public ILocator CancelButton(string accessPointName)
  26. => Card(accessPointName).GetByTestId("cancel-accesspoint-button");
  27. // Fields
  28. public ILocator ModelSection(string accessPointName)
  29. => Card(accessPointName).GetByTestId("accesspoint-model-section");
  30. public ILocator ModelInput(string accessPointName)
  31. => Card(accessPointName).GetByTestId("accesspoint-model-input");
  32. public ILocator ModelValue(string accessPointName)
  33. => Card(accessPointName).GetByTestId("accesspoint-model-value");
  34. public ILocator SpeedSection(string accessPointName)
  35. => Card(accessPointName).GetByTestId("accesspoint-speed-section");
  36. public ILocator SpeedInput(string accessPointName)
  37. => Card(accessPointName).GetByTestId("accesspoint-speed-input");
  38. public ILocator SpeedValue(string accessPointName)
  39. => Card(accessPointName).GetByTestId("accesspoint-speed-value");
  40. // Notes (prefixed components)
  41. public ILocator NotesViewerRoot(string accessPointName)
  42. => Card(accessPointName).GetByTestId("accesspoint-notes-viewer-markdown-viewer");
  43. public ILocator NotesViewerContent(string accessPointName)
  44. => Card(accessPointName).GetByTestId("accesspoint-notes-viewer-markdown-viewer-content");
  45. public ILocator NotesViewerEmpty(string accessPointName)
  46. => Card(accessPointName).GetByTestId("accesspoint-notes-viewer-markdown-viewer-empty");
  47. public ILocator NotesEditorRoot(string accessPointName)
  48. => Card(accessPointName).GetByTestId("accesspoint-notes-editor-markdown-editor");
  49. public ILocator NotesEditorTextarea(string accessPointName)
  50. => Card(accessPointName).GetByTestId("accesspoint-notes-editor-markdown-editor-textarea");
  51. // Modals
  52. public ILocator DeleteConfirmModal => page.GetByTestId("AccessPoint-confirm-modal");
  53. public ILocator DeleteConfirmButton => page.GetByTestId("AccessPoint-confirm-modal-confirm");
  54. public ILocator DeleteCancelButton => page.GetByTestId("AccessPoint-confirm-modal-cancel");
  55. public ILocator RenameModal => page.GetByTestId("accesspoint-rename-string-value-modal");
  56. public ILocator RenameModalInput => page.GetByTestId("accesspoint-rename-string-value-modal-input");
  57. public ILocator RenameModalSubmit => page.GetByTestId("accesspoint-rename-string-value-modal-submit");
  58. public ILocator RenameModalCancel => page.GetByTestId("accesspoint-rename-string-value-modal-cancel");
  59. public ILocator CloneModal => page.GetByTestId("accesspoint-clone-string-value-modal");
  60. public ILocator CloneModalInput => page.GetByTestId("accesspoint-clone-string-value-modal-input");
  61. public ILocator CloneModalSubmit => page.GetByTestId("accesspoint-clone-string-value-modal-submit");
  62. public ILocator CloneModalCancel => page.GetByTestId("accesspoint-clone-string-value-modal-cancel");
  63. // -------------------------------------------------
  64. // Navigation (hardware details page)
  65. // -------------------------------------------------
  66. public async Task GotoHardwareAsync(string baseUrl, string hardwareName)
  67. {
  68. await page.GotoAsync($"{baseUrl}/resources/hardware/{hardwareName}");
  69. await AssertCardVisibleAsync(hardwareName);
  70. }
  71. public async Task AssertCardVisibleAsync(string accessPointName)
  72. {
  73. await Assertions.Expect(Card(accessPointName)).ToBeVisibleAsync();
  74. }
  75. // -------------------------------------------------
  76. // Actions
  77. // -------------------------------------------------
  78. public async Task OpenAsync(string accessPointName)
  79. {
  80. await OpenLink(accessPointName).ClickAsync();
  81. await page.WaitForURLAsync($"**/resources/hardware/{accessPointName}");
  82. }
  83. public async Task BeginEditAsync(string accessPointName)
  84. {
  85. await EditButton(accessPointName).ClickAsync();
  86. await Assertions.Expect(ModelInput(accessPointName)).ToBeVisibleAsync();
  87. }
  88. public async Task SetModelAsync(string accessPointName, string model)
  89. {
  90. await ModelInput(accessPointName).FillAsync(model);
  91. }
  92. public async Task SetSpeedAsync(string accessPointName, double speed)
  93. {
  94. await SpeedInput(accessPointName).FillAsync(speed.ToString(System.Globalization.CultureInfo.InvariantCulture));
  95. }
  96. public async Task SaveAsync(string accessPointName)
  97. {
  98. await SaveButton(accessPointName).ClickAsync();
  99. await Assertions.Expect(ModelSection(accessPointName)).ToBeVisibleAsync();
  100. }
  101. public async Task CancelEditAsync(string accessPointName)
  102. {
  103. await CancelButton(accessPointName).ClickAsync();
  104. await Assertions.Expect(EditButton(accessPointName)).ToBeVisibleAsync();
  105. }
  106. public async Task DeleteAsync(string accessPointName)
  107. {
  108. await DeleteButton(accessPointName).ClickAsync();
  109. await DeleteConfirmButton.ClickAsync();
  110. await Assertions.Expect(Card(accessPointName))
  111. .Not.ToBeVisibleAsync();
  112. }
  113. public async Task RenameAsync(string accessPointName, string newName)
  114. {
  115. await RenameButton(accessPointName).ClickAsync();
  116. await RenameModalInput.FillAsync(newName);
  117. await RenameModalSubmit.ClickAsync();
  118. await page.WaitForURLAsync($"**/resources/hardware/{newName}");
  119. }
  120. public async Task CloneAsync(string accessPointName, string cloneName)
  121. {
  122. await CloneButton(accessPointName).ClickAsync();
  123. await CloneModalInput.FillAsync(cloneName);
  124. await CloneModalSubmit.ClickAsync();
  125. await page.WaitForURLAsync($"**/resources/hardware/{cloneName}");
  126. }
  127. private static string Sanitize(string value)
  128. => value.Replace(" ", "-");
  129. }