import { TestFile, TestCase, TestResult, ExecutionContext, Plugin, ProcedureDefinition, TestDataSet } from '../core';
export interface ExecutorOptions {
    headless?: boolean;
    timeout?: number;
    baseUrl?: string;
    variables?: Record<string, unknown>;
    plugins?: Plugin[];
    testIdAttribute?: string;
    baseDir?: string;
    procedures?: Record<string, ProcedureDefinition>;
}
export declare class TestExecutor {
    private options;
    private browser;
    private context;
    private page;
    private plugins;
    private projectProcedures;
    constructor(options?: ExecutorOptions);
    initialize(): Promise<void>;
    cleanup(): Promise<void>;
    private requiresBrowser;
    runTestFile(testFile: TestFile): Promise<TestResult[]>;
    private runLifecycleSteps;
    /**
     * Public method to register custom blocks from procedures
     */
    registerProcedures(procedures: Record<string, ProcedureDefinition>): void;
    private registerCustomBlocksFromProcedures;
    runTest(test: TestCase, fileVariables?: Record<string, unknown>, sharedContext?: ExecutionContext): Promise<TestResult>;
    runTestWithData(test: TestCase, fileVariables: Record<string, unknown> | undefined, dataSet: TestDataSet, dataIndex: number, sharedContext?: ExecutionContext): Promise<TestResult>;
    private extractStepsFromBlocklyState;
    private blocksToSteps;
    private blockToStep;
    private runStep;
    private resolveParams;
    private loadDataFromFile;
    private resolveVariableDefaults;
    /**
     * Resolve ${variable} placeholders in a string using context variables and currentData
     */
    private static resolveVariablePlaceholders;
    private createLogger;
}
