Four widgets load on staggered delays — wait for the ready state, not the skeleton placeholder
Four widgets each fetch on a staggered delay, showing a shimmering skeleton until their data resolves — the skeleton exists in the DOM long before the value does
Each widget renders a skeleton placeholder immediately, then flips to data-state="ready" once its /api/lab/widget fetch resolves. A naive wait for element passes against the placeholder — a false positive.
data-state="ready"
/api/lab/widget
Ready: 0 / 4
Wait for every widget to reach the ready state before reading its value
Revenue
Active Users
Error Rate
Latency p95
Automation hints
wait for [data-widget="revenue"]
[data-widget="revenue"][data-state="ready"]
[data-widget][data-state="ready"]
[data-widget-value="<id>"]
#dashboard-reload