import { FindPropertyPreference, MobileFindElementDescriptor, MobilePlatformElementSelector } from '@mablhq/test-model/mablscriptFind';
import { MobileTestExecutionContext } from '../../../contexts/MobileTestExecutionContext';
import { BrowserSize } from '../../../../../mobile/types';
import AttributeMatcher from '../AttributeMatcher';
import Candidate from '../Candidate';
import Locator from '../locators/MobileLocator';
import FindStrategy, { MobileFindStrategyResult } from './FindStrategy';
export declare enum LocationStrategySelectorType {
    Android = "android",
    iOS = "ios"
}
export declare const DEFAULT_MOBILE_FIND_CONFIG: {
    PollPeriodMs: number;
    WaitTimeoutMs: number;
    ScrollGroupStrategyWaitTimeoutMs: number;
    FindTimeoutMs: number;
};
export default abstract class LocatorStrategy<TSelector extends MobilePlatformElementSelector, TCandidate extends Candidate<TSelector>> extends FindStrategy {
    readonly selectorType: LocationStrategySelectorType;
    readonly locators: Locator[];
    readonly pollPeriodMs: number;
    readonly waitTimeoutMs: number;
    readonly matchers: AttributeMatcher<TSelector, TCandidate>[];
    readonly shouldSkipRetries: boolean;
    constructor(selectorType: LocationStrategySelectorType, locators: Locator[], pollPeriodMs: number, waitTimeoutMs: number, matchers: AttributeMatcher<TSelector, TCandidate>[], shouldSkipRetries: boolean);
    isApplicable(descriptor: MobileFindElementDescriptor): boolean;
    findElement(driver: WebdriverIO.Browser, mobileExecutionContext: MobileTestExecutionContext, descriptor: MobileFindElementDescriptor, isShortCircuited: () => boolean): Promise<MobileFindStrategyResult | undefined>;
    scoreCandidates(candidates: TCandidate[], selector: TSelector, mobileExecutionContext: MobileTestExecutionContext, preferences: Record<string, FindPropertyPreference> | undefined, useOnlyImportantIfPossible?: boolean): TCandidate[] | undefined;
    getWeightedMatchers(selector: TSelector, preferences: Record<string, FindPropertyPreference> | undefined, useOnlyImportantIfPossible: boolean): {
        weightedMatchers: AttributeMatcher<TSelector, TCandidate>[];
        onlyImportant: boolean;
    };
    getBestCandidate(scoredCandidates: TCandidate[]): TCandidate | undefined;
    isCandidateFullyVisible(candidateSelector: MobilePlatformElementSelector, windowSize: BrowserSize): boolean;
    getFoundSelectorDescription(foundSelector: MobilePlatformElementSelector): string;
    private correctTopCandidateRectsAndRescore;
}
//# sourceMappingURL=LocatorStrategy.d.ts.map