How can I integrate Superset charts with PlayWright to ensure that all charts and data on the page are fully rendered and there are no unexpected errors before taking a screenshot? #36845
Replies: 1 comment 8 replies
-
|
To ensure all Superset charts and data are fully rendered and error-free before taking a screenshot with Playwright in C#, follow the same logic used by Superset's built-in Playwright automation:
Here’s a C# Playwright code snippet that implements this logic: using Microsoft.Playwright;
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = true });
var page = await browser.NewPageAsync();
await page.GotoAsync("https://your-superset-url/superset/dashboard/123/", new PageGotoOptions { WaitUntil = WaitUntilState.Load });
// Wait for main dashboard container
await page.WaitForSelectorAsync(".dashboard");
// Wait for all chart containers to be visible
var chartContainers = await page.QuerySelectorAllAsync(".chart-container");
foreach (var chart in chartContainers)
{
await chart.WaitForElementStateAsync(ElementState.Visible);
}
// Wait for all loading spinners to disappear
var loadingElements = await page.QuerySelectorAllAsync(".loading");
foreach (var loading in loadingElements)
{
await loading.WaitForElementStateAsync(ElementState.Detached);
}
// Optional: wait for chart animations to finish
await page.WaitForTimeoutAsync(5000);
// Check for unexpected errors
var alerts = await page.QuerySelectorAllAsync("[role='alert']");
foreach (var alert in alerts)
{
var seeMoreBtn = await alert.QuerySelectorAsync("[role='button']");
if (seeMoreBtn != null)
{
await seeMoreBtn.ClickAsync();
var modalBody = await page.QuerySelectorAsync(".antd5-modal-content .antd5-modal-body");
if (modalBody != null)
{
var errorMsg = await modalBody.InnerTextAsync();
// Handle or log errorMsg as needed
}
var closeBtn = await page.QuerySelectorAsync(".antd5-modal-content .antd5-modal-close");
if (closeBtn != null)
await closeBtn.ClickAsync();
await page.WaitForSelectorAsync(".antd5-modal-content", new PageWaitForSelectorOptions { State = WaitForSelectorState.Detached });
}
}
// Take the screenshot
await page.ScreenshotAsync(new PageScreenshotOptions { Path = "dashboard.png" });For large dashboards, consider a tiled screenshot approach: scroll the dashboard in view-sized increments, wait for content to settle after each scroll, and stitch the images together. This is how Superset handles dashboards that extend beyond the viewport [source]. You can tune timeouts and delays using Superset config options like There are no C#-specific examples in the Superset codebase, but the DOM structure and selectors are the same as in Python, so this approach is portable [source]. To reply, just mention @dosu. How did I do? Good | Irrelevant | Incorrect | Verbose | Hallucination | Report 🐛 | Other |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
How can I integrate Superset charts with PlayWright to ensure that all charts and data on the page are fully rendered and there are no unexpected errors before taking a screenshot?I'm using C#, and I'm using Supersest version 4.0.1.
Beta Was this translation helpful? Give feedback.
All reactions