To test WebSocket messages in Playwright, use the WebSocket class, which represents WebSocket connections in the page and offers methods for testing messages. One such method is waitForEvent
, which waits for an event to fire and passes its value into a predicate function. The method returns when the predicate returns a truthy value.
TypeScript's type inference feature helps extract the correct overload for the waitForEvent
method. When calling this method with an event name, TypeScript infers the type of data passed into the predicate function based on the event name.
Here's an example:
import { test, expect } from '@playwright/test';
test('WebSocket message testing', async ({ page }) => {
// Navigate to the website
await page.goto('https://ray.run');
// Intercept WebSocket connections
const [webSocket] = await Promise.all([
page.waitForEvent('websocket'),
page.evaluate(() => {
// Create a WebSocket connection in the page
const ws = new WebSocket('wss://example.com/socket');
}),
]);
// Wait for a specific WebSocket message
await webSocket.waitForEvent('message', (data: string | Buffer) => {
// Check if the message contains the desired data
return data.toString().includes('desired-data');
});
// Perform additional tests
// ...
});
In this example, TypeScript infers that the data passed into the predicate function will be of type string | Buffer
when calling webSocket.waitForEvent('message')
.
For more information on each method and its overloads, refer to Playwright's API documentation. By leveraging the WebSocket class, TypeScript's type inference feature, and Playwright's API documentation, you can effectively test WebSocket messages in your application.
If you still have questions, please ask a question and I will try to answer it.
Rayrun is a community for QA engineers. I am constantly looking for new ways to add value to people learning Playwright and other browser automation frameworks. If you have feedback, email [email protected].