1.1.4 • Published 4 months ago

openai-playwright v1.1.4

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

openai-playwright

A Playwright automation tool supports openai-like models using Function Calling API.

Supports Typescript out of box.

Inspired by ZeroStep & auto-playwright

The driving principal of this library and included prompts is to steer AI to create select-as-seen type of CSS selectors that's more robust than selectors based on class names / attributes / test IDs

For example, AI should in favour of await page.locator('div:text("Get started")').click() versus await page.locator('div.my-own-class').click()

How to use

// ai.ts
import { setup, SetupOptions } from "openai-playwright";

const options: SetupOptions = {
  // a 70b+ model is strongly recommended for testing reliability
  model: "qwen2.5-7b-instruct-1m",
  baseURL: "http://localhost:1234/v1/",
  apiKey: "",
};

/**
 * SetupOptions:
 * 
 * timeout?: number; override test timeout in milliseconds. default 200 seconds
 * maxPromptLength?: number; defaults to 500,000 characters ~ 100,000 tokens
 * systemPrompt?: string; override build-in playwright system prompt with your own
 * model?: string;
 * ...openai.ClientOptions
 * 
 */
const { ai, aiSuggest } = setup(options);

const { ai, aiSuggest: aiCoder } = setup(options);

// customise AI features before exporting, e.g. save generated code into a file.
const aiSuggest = async (
  task: string,
  context: { test: typeof test | undefined; page: Page }
) => {
  const result = await aiCoder(task, context);
  fs.writeFileSync('../genrated-code.md', result.message)
};

export { ai, aiSuggest };
// test file
import { test, expect } from "@playwright/test";
import { ai, aiSuggest } from "./ai";

test("has title", async ({ page }) => {
  await page.goto("https://playwright.dev/");

  /*
   * ask ai to generate playwright code.
   * useful when you have a flaky test.
   **/
  // await aiSuggest(`expect page title to include "Playwright"`, { test, page });

  // Expect a title "to contain" a substring.
  await expect(page).toHaveTitle(/Playwright/);
  // or use AI to run the same
  // await ai(`expect page title to include "Playwright"`, { test, page });
});

test("get started link", async ({ page }) => {
  await page.goto("https://playwright.dev/");

  await ai(`click "Get started" button`, { test, page });
  // await page.getByRole("link", { name: "Get started" }).click();

  await page.waitForLoadState("load");
  // each ai() takes a page snapshot, therefore a separate call is mandatory when page content updates
  await aiSuggest(`expect "How to install Playwright" link to be visible`, { test, page });

});

Installation

using npm

npm i openai-playwright -D

using pnpm

pnpm add openai-playwright -D
1.1.4

4 months ago

1.1.3

4 months ago

1.1.2

4 months ago

1.1.1

4 months ago

1.1.0

4 months ago

1.0.3

5 months ago

1.0.2

5 months ago

1.0.1

5 months ago

1.0.0

5 months ago