All of your favorite user-centric querying functions from @testing-library/react and @testing-library/dom available from Playwright!
- Playwright Test fixture β
@playwright-testing-library/test/fixtureor... - Standalone queries β
playwright-testing-library/@playwright-testing-library/test - Asynchronous assertion helper (via wait-for-expect)
# For use with Playwright Test (@playwright/test) npm install --save-dev @playwright-testing-library/test # For use with Playwright (playwright) npm install --save-dev playwright-testing-library 2a. Use Playwright Test fixture
import {test as baseTest} from '@playwright/test' import {fixtures, within, TestingLibraryFixtures} from '@playwright-testing-library/test/fixture' // As only fixture const test = baseTest.extend<TestingLibraryFixtures>(fixtures) // Alternatively, with other fixtures interface Fixtures extends TestingLibraryFixtures { // ... additional fixture types } const test = baseTest.extend<Fixtures>({ ...fixtures, // ... additional fixtures }) const {expect} = test // Query methods are available in `test` blocks test('my form', async ({queries: {getByTestId}}) => { const $form = await getByTestId('my-form') // Scope queries with `within` const {getByLabelText} = within($form) const $email = await getByLabelText('Email') // Interact with Playwright like usual await $email.type('playwright@example.com') // ... })const {webkit} = require('playwright') // or 'firefox' or 'chromium' const {getDocument, queries} = require('playwright-testing-library') const {getByTestId, getByLabelText} = queries const browser = await webkit.launch() const page = await browser.newPage() // Grab ElementHandle for document const $document = await getDocument(page) // Your favorite query methods are available const $form = await getByTestId($document, 'my-form') // Returned elements are ElementHandles too! const $email = await getByLabelText($form, 'Email') // Interact with playwright like usual await $email.type('playwright@example.com') // ...Unique methods, not part of @testing-library/dom
-
Get an
ElementHandlefor the documentgetDocument(page: playwright.Page): ElementHandle
-
Wait for an assertion (wrapper around wait-for-expect)
waitFor( expectation: () => void | Promise<void>, timeout?: number, interval?: number ): Promise<{}>
The @testing-library/dom β All get*, query*, and find* methods are supported.
getQueriesForElement(handle: ElementHandle): ElementHandle & QueryUtils- extend the input object with the query API and return itgetNodeText(handle: ElementHandle): Promise<string>- get the text content of the elementqueries: QueryUtils- the query subset of@testing-library/domexportsqueryByPlaceholderTextqueryAllByPlaceholderTextgetByPlaceholderTextgetAllByPlaceholderTextfindByPlaceholderTextfindAllByPlaceholderTextqueryByTextqueryAllByTextgetByTextgetAllByTextfindByTextfindAllByTextqueryByLabelTextqueryAllByLabelTextgetByLabelTextgetAllByLabelTextfindByLabelTextfindAllByLabelTextqueryByAltTextqueryAllByAltTextgetByAltTextgetAllByAltTextfindByAltTextfindAllByAltTextqueryByTestIdqueryAllByTestIdgetByTestIdgetAllByTestIdfindByTestIdfindAllByTestIdqueryByTitlequeryAllByTitlegetByTitlegetAllByTitlefindByTitlefindAllByTitlequeryByDisplayValue,queryAllByDisplayValue,getByDisplayValue,getAllByDisplayValue,findByDisplayValue,findAllByDisplayValue,
- Async utilities
waitForElement,waitForElementToBeRemovedandwaitForDomChangeare not exposed. Consider using afind*query. fireEventmethod is not exposed, use Playwright's built-ins instead.expectassertion extensions are not available.
- pptr-testing-library
- @testing-library/dom of course!
- jest-playwright
- expect-playwright
- Yours! Name TBD, PR welcome ;)
MIT
This project is actively maintained by engineers at @hoverinc π.
