pageObjects.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. console.log('Trying to click on:', this.selector);
  47. await expect(this.page).not.toBeNull();
  48. await expect(this.page).toClick(this.selector);
  49. };
  50. }
  51. export class InputPageObject extends PageObject implements InputPageObjectType {
  52. constructor(selector: string) {
  53. super(selector);
  54. }
  55. enter = async (text: string): Promise<void> => {
  56. console.log(`Trying to enter text:${text} into:`, this.selector);
  57. await expect(this.page).not.toBeNull();
  58. await expect(this.page).toFill(this.selector, text);
  59. };
  60. }
  61. export class SelectPageObject extends PageObject implements SelectPageObjectType {
  62. constructor(selector: string) {
  63. super(selector);
  64. }
  65. select = async (text: string): Promise<void> => {
  66. console.log(`Trying to select text:${text} in dropdown:`, this.selector);
  67. await expect(this.page).not.toBeNull();
  68. await this.page.select(this.selector, text);
  69. };
  70. }