pageObjects.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { Page } from 'puppeteer-core';
  2. export class Selector {
  3. static fromAriaLabel = (selector: string) => {
  4. return `[aria-label="${selector}"]`;
  5. };
  6. static fromSelector = (selector: string) => {
  7. return selector;
  8. };
  9. }
  10. export interface PageObjectType {
  11. init: (page: Page) => Promise<void>;
  12. exists: () => Promise<void>;
  13. containsText: (text: string) => Promise<void>;
  14. }
  15. export interface ClickablePageObjectType extends PageObjectType {
  16. click: () => Promise<void>;
  17. }
  18. export interface InputPageObjectType extends PageObjectType {
  19. enter: (text: string) => Promise<void>;
  20. }
  21. export interface SelectPageObjectType extends PageObjectType {
  22. select: (text: string) => Promise<void>;
  23. }
  24. export class PageObject implements PageObjectType {
  25. protected page: Page = null;
  26. constructor(protected selector: string) {}
  27. init = async (page: Page): Promise<void> => {
  28. this.page = page;
  29. };
  30. exists = async (): Promise<void> => {
  31. const options = { visible: true } as any;
  32. await expect(this.page).not.toBeNull();
  33. await expect(this.page).toMatchElement(this.selector, options);
  34. };
  35. containsText = async (text: string): Promise<void> => {
  36. const options = { visible: true, text } as any;
  37. await expect(this.page).not.toBeNull();
  38. await expect(this.page).toMatchElement(this.selector, options);
  39. };
  40. }
  41. export class ClickablePageObject extends PageObject implements ClickablePageObjectType {
  42. constructor(selector: string) {
  43. super(selector);
  44. }
  45. click = async (): Promise<void> => {
  46. await expect(this.page).not.toBeNull();
  47. await expect(this.page).toClick(this.selector);
  48. };
  49. }
  50. export class InputPageObject extends PageObject implements InputPageObjectType {
  51. constructor(selector: string) {
  52. super(selector);
  53. }
  54. enter = async (text: string): Promise<void> => {
  55. await expect(this.page).not.toBeNull();
  56. await expect(this.page).toFill(this.selector, text);
  57. };
  58. }
  59. export class SelectPageObject extends PageObject implements SelectPageObjectType {
  60. constructor(selector: string) {
  61. super(selector);
  62. }
  63. select = async (text: string): Promise<void> => {
  64. await expect(this.page).not.toBeNull();
  65. await this.page.select(this.selector, text);
  66. };
  67. }