GithubHelp home page GithubHelp logo

dashcamio / goodlooks Goto Github PK

View Code? Open in Web Editor NEW
30.0 1.0 1.0 39.6 MB

Visually Validate Playwright Tests Without Flaky Selectors

Home Page: https://goodlooks.ai

JavaScript 100.00%
ai api cypress cypress-io gpt-3 gpt-4 openai-api openai-chatgpt playwright playwright-javascript

goodlooks's Introduction

GoodLooks Logo

Visually Validate Playwright Tests Without Flaky Selectors

Static selectors break with code changes and can't prove that a site "looks good". Is that button really missing or was the id changed? Is the site responsive on mobile? Is the correct image showing? These kinds of tests are impossible to validate with selectors alone and take a lot of time to test manually. GoodLooks.ai lets you visually validate your web pages with natural language prompts instead of selectors.

Check out our other products: TestDriver.ai and Dashcam.io.

Quickstart

  1. git clone [email protected]:dashcamio/goodlooks.git
  2. npm install
  3. npx playwright test

Note that these examples use a demo key that gets rotated weekly; you'll want to create your own API KEY.

Examples

Element Visibility

Validate that a cookie banner shows up.

Input Code

Framer.com Cookie Banner

const { test, expect } = require("@playwright/test");

const goodlooks = require("goodlooks");
goodlooks.configure("zpka_c0d0539ada014283bc974f0fd55835ea_2b745cbf");

expect.extend(goodlooks);

test("framer", async ({ page }) => {
  await page.goto("https://framer.com/");
  await page.waitForTimeout(5000);
  await expect(page).goodlooks("A request to enable cookies shows up");
});
Result
✅ PASS. The page displays a request to enable cookies with a message stating "We use cookies to personalize content, run ads, and analyze traffic." and an "Okay" button to acknowledge the message.

Mobile Responsiveness

Ensure a page is rendering mobile view properly.

Input Code

CNN.com on mobile

const { test, expect, devices } = require("@playwright/test");

const goodlooks = require("goodlooks");
goodlooks.configure("zpka_c0d0539ada014283bc974f0fd55835ea_2b745cbf");

expect.extend(goodlooks);

test("is mobile responsive", async ({ page }) => {
  page.setViewportSize(devices["iPhone X"].viewport);
  await page.goto("https://cnn.com/");

  await expect(page).goodlooks("should be mobile responsive");

});
Explanation
✅ PASS. The page appears to be displayed in a mobile-responsive layout. The content is aligned correctly within the confines of a narrow screen typical of mobile devices. The text is legible, the menu collapses into a hamburger icon, and the image is scaled to fit the screen width, indicating that the design adapts to a mobile resolution.

Application State

Validate that the video player is not playing.

Input Code

Rick Astley YouTube

const { test, expect } = require("@playwright/test");

const goodlooks = require("goodlooks");
goodlooks.configure("zpka_c0d0539ada014283bc974f0fd55835ea_2b745cbf");

expect.extend(goodlooks);

test("rickroll", async ({ page }) => {
  await page.goto("https://www.youtube.com/watch?v=dQw4w9WgXcQ");
  await expect(page).goodlooks("video is not playing");
});
Result
✅ PASS. The page shows a video with the play button available and a timeline that is not progressing, indicating that the video is currently not playing.

Color

Ensure a page renders correct image contents via img or canvas.

Input Code

CleanShot 2024-03-08 at 12 46 45

const { test, expect, devices } = require("@playwright/test");

const goodlooks = require("goodlooks");
goodlooks.configure("zpka_c0d0539ada014283bc974f0fd55835ea_2b745cbf");

expect.extend(goodlooks);

test("ycombinator", async ({ page }) => {
  await page.goto("https://news.ycombinator.com");
  await expect(page).goodlooks(
    "there is an orange strip at the top of the page"
  );
});
Result
✅ PASS. The page has an orange strip at the top, which is consistent with the given condition.

Image Contents

Ensure a page renders correct image contents via img or canvas.

Input Code

Eloquent Javascript

const { test, expect, devices } = require("@playwright/test");

const goodlooks = require("goodlooks");
goodlooks.configure("zpka_c0d0539ada014283bc974f0fd55835ea_2b745cbf");

expect.extend(goodlooks);

test("correct image appears", async ({ page }) => {
  await page.goto("https://eloquentjavascript.net/");
  await expect(page).goodlooks("there is bird on this page");
});
Result
✅ PASS. There is an illustration of a bird on the left side of the page on the cover of a book titled "Eloquent JavaScript, Fourth Edition."

Opinionated Image Contents

Ensure a diverse representation of people appears on the page. Of course, this judgement is left up to AI.

Input Code

CleanShot 2024-03-08 at 11 55 13

const { test, expect } = require("@playwright/test");
const goodlooks = require("goodlooks");
goodlooks.configure("zpka_c0d0539ada014283bc974f0fd55835ea_2b745cbf");

test("diversity", async ({ page }) => {
  await page.goto("https://diversityequityinclusion.com/about/");
  await expect(page).goodlooks("diverse people show up");
});
Result
✅ PASS. The page includes a collage of images featuring various individuals in different settings and professional environments, indicative of a diverse group of people. This aligns with the theme of "Diversity Equity Inclusion" that is prominently displayed on the page.

Setup

Install via NPM.

npm install goodlooks

Use in Playwright tests!

const { test, expect, devices } = require("@playwright/test");
const goodlooks = require("goodlooks");
goodlooks.configure("zpka_c0d0539ada014283bc974f0fd55835ea_2b745cbf");
expect.extend(goodlooks);

Debugging

It seems like GoodLooks is wrong? I'm sure the element exists that I'm checking for.

Run your playwright tests in UI mode:

npx playwright test --ui
  1. Check the log to see the time frame where the goodlooks check is called. Hover over that.
  2. A red highlight will appear in the Playwright UI, showing you the GUI state when the screenshot was taken
  3. You can also see the debug logs within the Console or Error tabs. CleanShot 2024-03-08 at 12 27 49

What part of the page is checked?

Only the visible part of the page is checked, not the full page. You must scroll to check other page parts.

What are the limits?

The AI is great at identifying what is in an image, but it's not great at identifying where those things are in relation to other things. For example, don't ask GoodLooks to count items to validate their position on the screen.

How do I manage my subscription

You can manage your subscription here.

Other Projects

goodlooks's People

Contributors

ianjennings avatar orliesaurus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

gunner8000

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.