import { AndroidElementSelector, iOSElementSelector, MobileFindElementDescriptor, MobilePlatformElementSelector, PrimaryFindMethod, SimpleElementSelectorAndContext } from '@mablhq/test-model/mablscriptFind';
import { ElementReference } from '../../../types';
import { MobileTestExecutionContext } from '../../../contexts/MobileTestExecutionContext';
import { MobilePlatformEnum } from '@mablhq-internal/runtime/mablApi';
import { BrowserSize } from '../../../../../mobile/types';
import Candidate from '../Candidate';
import type { BoundingBox } from '@mablhq-internal/runtime/core/common-types';
export interface MobileFindStrategyResult {
    visualFindBoundingBox?: BoundingBox;
    elementReference?: ElementReference;
    scoredCandidates: Candidate<MobilePlatformElementSelector>[];
    context: MobileElementContext;
    webViewElementBoundingClientRect?: DOMRect;
    webViewElementSelector?: SimpleElementSelectorAndContext;
}
export type MobileElementContext = NativeContext | AndroidWebViewContext | iOSWebViewContext;
export declare enum MobileContextType {
    androidWebView = "ANDROID_WEBVIEW",
    iOSWebView = "IOS_WEBVIEW",
    native = "NATIVE"
}
export interface NativeContext {
    contextType: MobileContextType.native;
}
export declare const NATIVE_CONTEXT: NativeContext;
export interface AndroidWebViewContext {
    contextType: MobileContextType.androidWebView;
    windowHandle: string;
}
export interface iOSWebViewContext {
    contextType: MobileContextType.iOSWebView;
    webViewId: string;
}
export interface MobileFindExecutionConfig {
    isRecordingWhileTrainingMode: boolean;
    isWaitUntilFind: boolean;
    maxFindExecutionTimeMs: number;
    onlyFindByXPath: boolean;
    platform: MobilePlatformEnum;
    primaryFindMethod?: PrimaryFindMethod;
    windowSize: BrowserSize;
}
export default abstract class FindStrategy {
    constructor();
    abstract findElement(driver: WebdriverIO.Browser, mobileExecutionContext: MobileTestExecutionContext, descriptor: MobileFindElementDescriptor, isShortCircuited: () => boolean): Promise<MobileFindStrategyResult | undefined>;
    sleep(ms: number): Promise<void>;
    isApplicable(descriptor: MobileFindElementDescriptor): boolean;
    abstract getName(): string;
    getFindTimeout(): number;
    getPlatformSelector(descriptor: MobileFindElementDescriptor): AndroidElementSelector | iOSElementSelector | undefined;
}
//# sourceMappingURL=FindStrategy.d.ts.map