Pre-built test flows for common Grafana operations including dashboard management, data source operations, panel configuration, authentication, and navigation.
Authenticate user via UI or API with configurable credentials.
/**
* Login to Grafana via UI or API
* @param username - Username (default: from env)
* @param password - Password (default: from env)
* @param loginViaApi - Use API login instead of UI (default: true)
*/
function login(username?: string, password?: string, loginViaApi?: boolean): void;Assert that success notification appears after operations.
/**
* Assert success notification appears
*/
function assertSuccessNotification(): void;Create new dashboard with optional configuration including annotations, variables, and time range.
/**
* Create dashboard with optional configuration
* @param config - Dashboard configuration options
*/
function addDashboard(config?: Partial<AddDashboardConfig>): void;
interface AddDashboardConfig {
/** Dashboard title */
title: string;
/** Time range configuration */
timeRange: TimeRangeConfig;
/** Dashboard variables */
variables: PartialAddVariableConfig[];
/** Dashboard annotations */
annotations: AddAnnotationConfig[];
}
interface AddAnnotationConfig {
/** Data source name for annotation */
dataSource: string;
/** Annotation name */
name: string;
/** Optional data source form configuration function */
dataSourceForm?: () => void;
}
interface PartialAddVariableConfig {
/** Variable name (required) */
name: string;
/** Variable type (default provided) */
type?: string;
/** Variable hide setting (default provided) */
hide?: string;
/** Constant value for constant variables */
constantValue?: string;
/** Data source for datasource variables */
dataSource?: string;
/** Variable label */
label?: string;
/** Variable query */
query?: string;
/** Variable regex filter */
regex?: string;
/** Custom variable query form function */
variableQueryForm?: (config: AddVariableConfig) => void;
}
type AddVariableConfig = AddVariableDefault & AddVariableOptional & AddVariableRequired;
interface AddVariableDefault {
/** Variable hide setting */
hide: string;
/** Variable type */
type: string;
}
interface AddVariableOptional {
/** Constant value for constant variables */
constantValue?: string;
/** Data source for datasource variables */
dataSource?: string;
/** Variable label */
label?: string;
/** Variable query */
query?: string;
/** Variable regex filter */
regex?: string;
/** Custom variable query form function */
variableQueryForm?: (config: AddVariableConfig) => void;
}
interface AddVariableRequired {
/** Variable name */
name: string;
}Delete dashboard via UI or API by title or UID.
/**
* Delete dashboard via UI or API
* @param config - Dashboard deletion configuration
*/
function deleteDashboard(config: DeleteDashboardConfig): void;
interface DeleteDashboardConfig {
/** Dashboard title */
title?: string;
/** Dashboard UID */
uid?: string;
/** Use quick delete (skip confirmation) */
quick?: boolean;
}Navigate to existing dashboard by UID.
/**
* Open dashboard by UID
* @param config - Dashboard opening configuration
*/
function openDashboard(config?: PartialOpenDashboardConfig): void;
interface PartialOpenDashboardConfig {
/** Dashboard UID */
uid?: string;
}Save current dashboard changes.
/**
* Save current dashboard
*/
function saveDashboard(): void;Import dashboard from JSON configuration.
/**
* Import dashboard from JSON
* @param dashboard - Dashboard JSON configuration
* @param timeout - Optional timeout in milliseconds
* @param skipValidation - Skip validation if true
*/
function importDashboard(
dashboard: Dashboard,
timeout?: number,
skipValidation?: boolean
): void;
/**
* Import multiple dashboards from directory
* @param dirPath - Directory path containing dashboard JSON files
* @param timeout - Optional timeout in milliseconds
* @param skipValidation - Skip validation if true
*/
function importDashboards(
dirPath: string,
timeout?: number,
skipValidation?: boolean
): void;Add new data source with configuration options.
/**
* Add data source with configuration
* @param config - Data source configuration
*/
function addDataSource(config?: Partial<AddDataSourceConfig>): void;
interface AddDataSourceConfig {
/** Data source name */
name?: string;
/** Data source type */
type?: string;
/** Data source URL */
url?: string;
/** Additional configuration */
config?: Record<string, any>;
}Delete data source via UI or API by name or ID.
/**
* Delete data source via UI or API
* @param config - Data source deletion configuration
*/
function deleteDataSource(config: DeleteDataSourceConfig): void;
interface DeleteDataSourceConfig {
/** Data source name */
name?: string;
/** Data source ID */
id?: string;
/** Use quick delete (skip confirmation) */
quick?: boolean;
}Add new panel to current dashboard with visualization and configuration.
/**
* Add new panel to dashboard
* @param config - Panel configuration
*/
function addPanel(config?: Partial<PartialAddPanelConfig>): void;
interface PartialAddPanelConfig extends PartialConfigurePanelConfig {
/** Data source name (required for add panel) */
dataSourceName: string;
/** Panel title (required for add panel) */
panelTitle: string;
/** Custom queries form function */
queriesForm: (config: AddPanelConfig) => void;
}Edit existing panel configuration.
/**
* Edit existing panel
* @param config - Panel edit configuration
*/
function editPanel(config: Partial<PartialEditPanelConfig>): void;
interface PartialEditPanelConfig extends PartialConfigurePanelConfig {
/** Panel title (required for edit panel) */
panelTitle: string;
/** Custom queries form function */
queriesForm?: (config: EditPanelConfig) => void;
}Core panel configuration function for advanced panel setup with chart data, screenshots, and validation options.
/**
* Core panel configuration function for advanced panel setup
* @param config - Panel configuration object
*/
function configurePanel(config: PartialConfigurePanelConfig): void;
interface PartialConfigurePanelConfig {
/** Whether this is editing an existing panel */
isEdit: boolean;
/** Chart data configuration for API monitoring */
chartData?: {
method: string;
route: string | RegExp;
};
/** Dashboard UID (defaults to last added dashboard) */
dashboardUid?: string;
/** Data source name */
dataSourceName?: string;
/** Panel title */
panelTitle?: string;
/** Custom queries form function */
queriesForm?: (config: ConfigurePanelConfig) => void;
/** Time range configuration */
timeRange?: TimeRangeConfig;
/** Visualization type name */
visualizationName?: string;
/** Operation timeout in milliseconds */
timeout?: number;
/** Whether to match screenshot */
matchScreenshot?: boolean;
/** Whether to save dashboard after configuration */
saveDashboard?: boolean;
/** Screenshot filename for comparison */
screenshotName?: string;
/** Whether to visit dashboard at start */
visitDashboardAtStart?: boolean;
}Open panel context menu items for panel actions.
/**
* Open panel context menu items
* @param menu - Menu item to select
* @param panelTitle - Panel title (optional)
*/
function openPanelMenuItem(menu: PanelMenuItems, panelTitle?: string): void;
type PanelMenuItems = 'Edit' | 'View' | 'Share' | 'Inspect' | 'More';Set absolute time range for current context.
/**
* Set absolute time range
* @param config - Time range configuration
*/
function setTimeRange(config: TimeRangeConfig): void;
/**
* Set dashboard time range (specific to dashboard context)
* @param config - Time range configuration
*/
function setDashboardTimeRange(config: TimeRangeConfig): void;
interface TimeRangeConfig {
/** Start time */
from: string;
/** End time */
to: string;
}Select dropdown option from Grafana UI components.
/**
* Select dropdown option
* @param config - Selection configuration
*/
function selectOption(config: SelectOptionConfig): void;
interface SelectOptionConfig {
/** Container selector */
container: string;
/** Option text or value */
optionText: string;
}Manage user preferences and settings.
/**
* Set user preferences
* @param prefs - User preferences object
*/
function setUserPreferences(prefs: UserPreferences): void;
/**
* Reset to default preferences
*/
function setDefaultUserPreferences(): void;
interface UserPreferences {
/** Timezone preference (empty string for "Default" option) */
timezone?: string;
}Revert all changes made during test execution.
/**
* Clean up all test changes (dashboards, data sources, preferences)
*/
function revertAllChanges(): void;Pre-defined visualization type constants for panel creation:
const VISUALIZATION_ALERT_LIST = 'Alert list';
const VISUALIZATION_BAR_GAUGE = 'Bar gauge';
const VISUALIZATION_CLOCK = 'Clock';
const VISUALIZATION_DASHBOARD_LIST = 'Dashboard list';
const VISUALIZATION_GAUGE = 'Gauge';
const VISUALIZATION_GRAPH = 'Graph';
const VISUALIZATION_HEAT_MAP = 'Heatmap';
const VISUALIZATION_LOGS = 'Logs';
const VISUALIZATION_NEWS = 'News';
const VISUALIZATION_PIE_CHART = 'Pie Chart';
const VISUALIZATION_PLUGIN_LIST = 'Plugin list';
const VISUALIZATION_POLYSTAT = 'Polystat';
const VISUALIZATION_STAT = 'Stat';
const VISUALIZATION_TABLE = 'Table';
const VISUALIZATION_TEXT = 'Text';
const VISUALIZATION_WORLD_MAP = 'Worldmap Panel';Pre-defined variable type and hide constants:
const VARIABLE_HIDE_LABEL = 'Label';
const VARIABLE_HIDE_NOTHING = '';
const VARIABLE_HIDE_VARIABLE = 'Variable';
const VARIABLE_TYPE_AD_HOC_FILTERS = 'Ad hoc filters';
const VARIABLE_TYPE_CONSTANT = 'Constant';
const VARIABLE_TYPE_DATASOURCE = 'Datasource';
const VARIABLE_TYPE_QUERY = 'Query';Usage Example:
import { e2e } from "@grafana/e2e";
// Complete workflow example
e2e.scenario({
describeName: "Complete Workflow",
itName: "should create dashboard with panel",
scenario: () => {
// Login
e2e.flows.login();
// Create dashboard
e2e.flows.addDashboard({
title: "Test Dashboard",
tags: ["test", "automation"]
});
// Add panel
e2e.flows.addPanel({
panelTitle: "CPU Usage",
visualization: e2e.flows.VISUALIZATION_GRAPH
});
// Save dashboard
e2e.flows.saveDashboard();
// Verify success
e2e.flows.assertSuccessNotification();
// Cleanup
e2e.flows.revertAllChanges();
}
});