Testing a loading animation requires network delay simulation. When the page.route handler is an async function, you can add an artificial delay with await new Promise(r => setTimeout(r, ms)).
The handler calls route.fulfill(...) after the delay — at that point the UI is still in the «Loading…» state. Complete the response after the delay.
page is already available. Intercept the /api/report request, add a delay of at least 1000 ms, then respond with fulfill. Finally click the «Load report» button.
The delay duration and JSON content are flexible — as long as setTimeout + fulfill are both used.