Free and open source library to create Playwright/Jest browser tests and run them in CI
๐ Get Started | ๐ API | ๐ Chat | ๐บ๏ธ Roadmap
QA Wolf is a Node.js library for creating browser tests. Run one command (npx qawolf init) 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.
Set up your project for browser tests:
cd /my/awesome/project
npm init qawolf
# or yarn create qawolfConfigure your test directory and CI provider:
? rootDir: Directory to create tests in (.qawolf)
? Choose CI Provider (Use arrow keys)
Azure DevOps
Bitbucket Pipelines
CircleCI
โฏ GitHub Actions
GitLab CI/CD
Jenkins
Skip CI setup
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
npx qauto create url [name]๐ช Convert your actions into Playwright code:
| Action | Status | Example |
|---|---|---|
| Click | โ | page.click(selectors['0_submit']) |
| Type | โ | page.type(selectors['0_username'], 'username') |
| Scroll | โ | qawolf.scroll(page, 'html', { x: 0, y: 200 }) |
| Select | โ | page.selectOption(selectors['0_ice_cream'], 'chocolate') |
| Replace text | โ | page.fill(selectors['0_username'], 'username') |
| Go back | โ | page.goBack() |
| Go forward | โ | page.goForward() |
| Go to | โ | page.goTo(url) |
| Go to | โ | page.goTo(url) |
| Add jest step | โ | it(name, async()=>{}) |
| Paste | โ | page.type(selectors['password'], 'pasted') |
| Use a test attribute | โ | page.click("[data-qa='submit']") |
| Use a test attribute on an ancestor | โ | page.click("[data-qa='radio'] [value='cat']") |
| Use multiple pages/tabs | โ | qawolf.waitForPage(page.context(), 1) |
| Iframes | ๐บ๏ธ | Coming soon |
| Drag and drop | ๐บ๏ธ | Coming soon |
| File upload | ๐บ๏ธ | Coming soon |
| Back button | ๐บ๏ธ | Coming soon |
As your test is created:
- โ๏ธ Edit the code as you like
- ๐ฅ๏ธ Use the REPL to try out commands
On Chromium:
npx qauto test [name]On Firefox:
npx qauto test --firefox [name]On Webkit:
npx qauto test --webkit [name]On all browsers:
npx qauto test --all-browsers [name]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.
QA Wolf is licensed under BSD-3-Clause.

