Puppeteer Testing Example

By Oguzhan Cakmak at

import puppeteer from "puppeteer";
import faker from "faker";

const User = {
  name: faker.name.findName(),
  phone: faker.phone.phoneNumber(),
  notes: faker.random.words(1),
};

const User1 = {
  name: faker.name.findName(),
  phone: faker.phone.phoneNumber(),
  notes: faker.random.words(1),
};

let page;
let browser;

const isDebugging = () => {
  const debuggingMode = {
    headless: false,
    slowMo: 50,
  };
  return process.env.JEST_ENV === "debug" ? debuggingMode : {};
};

jest.setTimeout(10000);

beforeAll(async () => {
  browser = await puppeteer.launch(isDebugging());
  page = await browser.newPage();
  await page.goto(
    `http://localhost:${process.env.JEST_ENV === "debug" ? "3003" : "3000"}/`
  );
  page.setViewport({
    width: 1000,
    height: 1080,
  });
});

afterAll(async () => {
  await page.close();
  await browser.close();
});

describe("Login Page", () => {
  test("Page has content", async (assert) => {
    const content = await page.content();
    assert.ok(content.length > 0);
  });

  test("Page doesn't have any visual change", async (assert) => {
    await page.screenshot({
      path: "screenshots/full.png",
      fullPage: true,
    });
  });

  test("Page has password", async () => {
    await page.click('[data-test-id="password"]');
    await page.type('[data-test-id="password"]', "password");
  });
});

describe("Edit User", () => {
  test("The page update user info", async () => {
    await page.click(`[data-test-username="${User.name}"]`);

    await page.click('[data-test-id="userName"]', { clickCount: 3 });
    await page.type('[data-test-id="userName"]', User1.name);

    await page.click('[data-test-id="userPhone"]', { clickCount: 3 });
    await page.type('[data-test-id="userPhone"]', User1.phone);

    await page.click('[data-test-id="signInButton"]');

    let userName;
    let res = await page.waitForSelector(
      `[data-test-username="${User1.name}"]`
    );
    console.log(res);
    expect(res).toBeDefined();
  });
});

describe("Delete User", () => {
  test("The page lets you to change your mind when deleting the video call", async () => {
    await page.click(`[data-test-username="${User1.name}"]`);
    await page.click('[data-test-id="deleteUser"]');
    await page.click('[data-test-id="no"]');
    const res = await page.waitForSelector(
      `[data-test-username="${User1.name}"]`
    );
    expect(res).toBeDefined();
  });

  test("The page lets you to delete the video call", async () => {
    await page.click(`[data-test-username="${User1.name}"]`);
    await page.click('[data-test-id="deleteUser"]');
    await page.click('[data-test-id="yes"]');
  });
});