mirror of
https://github.com/apache/superset.git
synced 2026-07-26 08:32:42 +00:00
`take_tiled_screenshot()` waited for the *absence* of `.loading` elements visible in the viewport before capturing each tile. With DashboardVirtualization on (default), a chart holder that has just scrolled into view but hasn't fired its IntersectionObserver callback yet mounts neither a spinner nor a chart, so the predicate passed vacuously and the tile was captured blank. On top of that, a per-tile timeout was caught, logged as a warning, and the tile was captured anyway -- delivering a spinner screenshot to report recipients instead of failing the report. Replace the absence-of-`.loading` predicate with a positive readiness check: every chart holder (`data-test="dashboard-component-chart-holder"`) intersecting the viewport must show a terminal state (a rendered chart via `.slice_container`, or an error/empty state via `[role="alert"]` / `.ant-empty` / `.missing-chart-container`) before a tile is captured. A holder with nothing mounted no longer satisfies the wait. A per-tile timeout is now logged at ERROR with the tile index, the load_wait, and the identities of the still-unready chart holders, and re-raises instead of being swallowed -- the report now fails (ReportScheduleScreenshotFailedError) instead of silently shipping a degraded screenshot. Co-Authored-By: Claude <noreply@anthropic.com>