Skip to content

Instantly share code, notes, and snippets.

@jwatney
Created March 11, 2024 21:46
Show Gist options
  • Save jwatney/62bb3b3b1eca0f0754e1faea6cbcddc6 to your computer and use it in GitHub Desktop.
Save jwatney/62bb3b3b1eca0f0754e1faea6cbcddc6 to your computer and use it in GitHub Desktop.
Playwright test for grepping webpage responses
import { Response, test } from '@playwright/test'
const pattern = new RegExp('some string...', 'i')
const urls = ['https://some.url.com/some/page.html']
const requestURLValidator = (response: Response) => {
const requestURL = response.url()
if (pattern.test(requestURL)) {
throw new Error(requestURL)
}
}
const requestHeadersValidator = async (response: Response) => {
const request = response.request()
const requestURL = request.url()
const requestHeaders = await request.headersArray()
requestHeaders.forEach((header) => {
if (pattern.test(header.name) || pattern.test(header.value)) {
throw new Error(requestURL)
}
})
}
const responseHeadersValidator = async (response: Response) => {
const request = response.request()
const requestURL = request.url()
const responseHeaders = await response.headersArray()
responseHeaders.forEach((header) => {
if (pattern.test(header.name) || pattern.test(header.value)) {
throw new Error(requestURL)
}
})
}
const responseBodyValidator = async (response: Response) => {
const request = response.request()
const requestURL = request.url()
const body = (await response.body())?.toString() ?? ''
if (pattern.test(body)) {
throw new Error(requestURL)
}
}
const validators = [
requestURLValidator,
requestHeadersValidator,
responseHeadersValidator,
responseBodyValidator,
]
urls.forEach((url) => {
test.describe(url, () => {
test('grep test', async ({ page }) => {
page.on('response', (response) => {
validators.forEach(async (validator) => {
try {
await validator(response)
} catch (e: unknown) {
throw new Error(`Found in: ${url}: ${e}`)
}
})
})
await page.goto(url)
await page.waitForLoadState('networkidle')
})
})
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment