DesktopListPom.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using Microsoft.Playwright;
  2. namespace Tests.E2e.PageObjectModels;
  3. public class DesktopsListPom(IPage page) {
  4. public AddResourceComponent AddDesktop => new(page, "desktop");
  5. public ILocator PageRoot => page.GetByTestId("desktops-page-root");
  6. public ILocator PageTitle => page.GetByTestId("desktops-page-title");
  7. public ILocator Loading => page.GetByTestId("desktops-loading");
  8. public ILocator EmptyState => page.GetByTestId("desktops-empty");
  9. public ILocator DesktopsList => page.GetByTestId("desktops-list");
  10. public ILocator AddSection => page.GetByTestId("desktops-add-section");
  11. // Must match AddResourceComponent test IDs
  12. public ILocator AddInput => page.GetByTestId("add-desktop-input");
  13. public ILocator AddButton => page.GetByTestId("add-desktop-button");
  14. // -------------------------------------------------
  15. // Dynamic Desktop Items
  16. // -------------------------------------------------
  17. public ILocator DesktopItem(string name) => page.GetByTestId($"desktop-item-{Sanitize(name)}");
  18. public ILocator OpenLink(string name) {
  19. return DesktopItem(name)
  20. .GetByTestId("open-desktop-link");
  21. }
  22. public ILocator DeleteButton(string name) {
  23. return DesktopItem(name)
  24. .GetByTestId("delete-desktop-button");
  25. }
  26. public ILocator RenameButton(string name) {
  27. return DesktopItem(name)
  28. .GetByTestId("rename-desktop-button");
  29. }
  30. public ILocator CloneButton(string name) {
  31. return DesktopItem(name)
  32. .GetByTestId("clone-desktop-button");
  33. }
  34. public ILocator ModelBadge(string name) {
  35. return DesktopItem(name)
  36. .GetByTestId("desktop-model-badge");
  37. }
  38. // -------------------------------------------------
  39. // Navigation
  40. // -------------------------------------------------
  41. public async Task GotoAsync(string baseUrl) {
  42. await page.GotoAsync($"{baseUrl}/desktops/list");
  43. await AssertLoadedAsync();
  44. }
  45. public async Task AssertLoadedAsync() {
  46. await Assertions.Expect(PageRoot).ToBeVisibleAsync();
  47. await Assertions.Expect(PageTitle).ToBeVisibleAsync();
  48. }
  49. public async Task WaitForListAsync() => await Assertions.Expect(DesktopsList).ToBeVisibleAsync();
  50. // -------------------------------------------------
  51. // Actions
  52. // -------------------------------------------------
  53. public async Task AddDesktopAsync(string name) {
  54. await AddDesktop.AddAsync(name);
  55. await Assertions.Expect(DesktopItem(name))
  56. .ToBeVisibleAsync();
  57. }
  58. public async Task DeleteDesktopAsync(string name) {
  59. await DeleteButton(name).ClickAsync();
  60. await page.GetByTestId("Desktop-confirm-modal-confirm").ClickAsync();
  61. await Assertions.Expect(DesktopItem(name))
  62. .Not.ToBeVisibleAsync();
  63. }
  64. public async Task OpenDesktopAsync(string name) {
  65. await OpenLink(name).ClickAsync();
  66. await page.WaitForURLAsync($"**/resources/hardware/{name}");
  67. }
  68. public async Task AssertDesktopExists(string name) {
  69. await Assertions.Expect(DesktopItem(name))
  70. .ToBeVisibleAsync();
  71. }
  72. public async Task AssertDesktopDoesNotExist(string name) {
  73. await Assertions.Expect(DesktopItem(name))
  74. .Not.ToBeVisibleAsync();
  75. }
  76. private static string Sanitize(string value) => value.Replace(" ", "-");
  77. }