/qawolf

๐ŸบCreate browser tests 10x faster

Primary LanguageTypeScriptBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

QA Wolf

Create browser tests 10x faster

Free and open source library to create Playwright/Jest browser tests and run them in CI

tweet npm version

๐Ÿš€ Get Started | ๐Ÿ“– API | ๐Ÿ‘‹ Chat | ๐Ÿ—บ๏ธ Roadmap


๐Ÿบ What is QA Wolf?

QA Wolf is a Node.js library for creating browser tests. Run one command (npm init qawolf@latest or yarn create qawolf) to configure your project and set up CI.

  • Skip writing boilerplate: Your browser actions are converted to Playwright/Jest code.
  • Create stable tests: Your tests automatically wait for elements. Element selectors use test attributes when possible, and CSS/text otherwise.
  • Edit your tests: Edit your code as it is created and add steps to existing tests. Re-run your tests automatically with watch mode.
  • Run tests in CI: A workflow file for your CI provider is automatically created for you.
  • Debug with ease: Each test run includes a video and browser logs.

๐Ÿ–ฅ๏ธ Install

Documentation


Set up your project for browser tests:

cd /my/awesome/project
npm init qawolf@latest
# or yarn create qawolf

Configure your test directory and CI provider:

? rootDir: Directory to create tests in (.qawolf)

? Set up CI with GitHub Actions? (y/N)

This will install qawolf, jest and playwright as dev dependencies and create a CI workflow file to:

  • ๐ŸŽ Run tests in parallel
  • ๐Ÿ“น Record a video of each test
  • ๐Ÿ“„ Capture browser logs

๐ŸŽจ Create a test

Documentation


npx qawolf create [url] [name]

๐Ÿ’ช Convert your actions into Playwright code:

Action Status Example
Click โœ… page.click('#login')
Type โœ… page.fill('.username', 'spirit@qawolf.com')
Scroll โœ… qawolf.scroll(page, 'html', { x: 0, y: 200 })
Select โœ… page.selectOption('.ice_cream', 'chocolate')
Paste โœ… page.fill('password', 'pasted')
Reload โœ… page.reload()
Replace text โœ… page.fill('.username', 'username')
Go back โœ… page.goBack()
Use iframes โœ… (await page.waitForSelector("#storybook-preview-iframe")).contentFrame()
Use multiple tabs โœ… context.newPage()
Use a popup โœ… qawolf.waitForPage(context, 1)
Use a test attribute โœ… page.click("[data-qa='submit']")
Use a test attribute on an ancestor โœ… page.click("[data-qa='radio'] [value='cat']")
Drag and drop ๐Ÿ—บ๏ธ Coming soon
File upload ๐Ÿ—บ๏ธ Coming soon

As your test is created:

  • โœ๏ธ Edit the code as you like
  • ๐Ÿ–ฅ๏ธ Use the REPL to try out commands

โœ… Run your tests

Documentation


On Chromium:

npx qawolf test [name]

On Firefox:

npx qawolf test --firefox [name]

On Webkit:

npx qawolf test --webkit [name]

On all browsers:

npx qawolf test --all-browsers [name]

๐Ÿ™‹ Get help

We want QA Wolf to work for you, so please reach out to get help!

If you have a feature request or feedback, please open an issue or chat with us.


๐Ÿ“ License

QA Wolf is licensed under BSD-3-Clause.