/// <reference types="webdriverio/async" />
import { AndroidAttribute, Attribute, Keys } from './consts';
export declare const COMPONENT_SCROLL_COORDINATES: {
    x: number;
    y: number;
};
export declare function By(identifier: string): Promise<WebdriverIO.Element>;
type MobilePlatform = 'android' | 'ios';
type DesktopPlatform = 'win32' | 'windows' | 'macos';
type Platform = MobilePlatform | DesktopPlatform;
/****************************** IMPORTANT! PLEASE READ! **************************************************
 * Every component's page object extends this. We can assume each test page will interact with at least
 * two UI elements, so we'll add integration for two UI elements in this file (See *Getters* section below).
 * Every additional UI element that a test page wants to interact with should be handled in that respective
 * component's page object.
 *********************************************************************************************************/
export declare abstract class BasePage {
    protected platform?: Platform;
    constructor();
    /******************************************************************/
    /**************** UI Element Interaction Methods ******************/
    /******************************************************************/
    /**
     * For any given page object, this method automates:
     *  - Navigating to the page by clicking its component button
     *  - Waiting for the component page to load
     *  - Optionally expanding its E2E sections IF a boolean flag is passed.
     *
     * This also contains error checking through its waiters, removing the extra `expect()` calls during test setup.
     *
     * @param {boolean} showE2ESection Some components' E2E tests check only if the test page loads correctly or not. Others
     * (majority), perform UI manipulation tests on UI components on the test page. In these scenarios, these UI components have their
     * own section on the test page (by default, it's hidden so partners don't see it). If this parameter is true, this method opens up
     * that testing section.
     */
    navigateToPageAndLoadTests(showE2ESection?: boolean): Promise<void>;
    enableE2ETesterMode(): Promise<void>;
    /**
     * Checks to see if an element attribute is strictly equal to an expected value the user passes in.
     * The advantage to this over testing using .isEqual in a spec is that this throws a detailed error if
     * the expected and actual values don't match. This should be called for attribute tests in specs. */
    compareAttribute(element: Promise<WebdriverIO.Element>, attribute: Attribute | AndroidAttribute, expectedValue: any): Promise<boolean>;
    isPageLoaded(): Promise<boolean>;
    isButtonInView(): Promise<boolean>;
    /** Given a WebdriverIO element promise, send a click input to the element. Use this across all PageObject methods and test specs. */
    click(element: Promise<WebdriverIO.Element>): Promise<void>;
    /** Given a WebdriverIO element promise, send the passed in list of keys as keyboard inputs. Use this across all PageObject methods and test specs.
     *
     * Common examples:
     * - Press enter on a button control: ButtonPageObject.sendKeys(ButtonPageObject.button, [KEY_ENTER])
     * - Shift tab to the previous element: FocusZonePageObject.sendKeys(FocusZonePageObject.beforeButton, [KEY_SHIFT, KEY_TAB])
     * - Escape out of a menu: MenuPageObject.sendKeys(MenuPageObject.item1, [KEY_ESCAPE])
     */
    sendKeys(element: Promise<WebdriverIO.Element>, keys: Keys[]): Promise<void>;
    /** Short-hand method for PageObjects to get an element attribute during testing, with attribute being type-enforced. */
    getElementAttribute(element: WebdriverIO.Element, attribute: Attribute): Promise<string>;
    mobileScrollToComponentButton(): Promise<void>;
    /** Waits for the tester app to load by checking if the startup page loads. If the app doesn't load before the timeout, it causes the test to fail. */
    waitForInitialPageToDisplay(): Promise<void>;
    isInitialPageDisplayed(): Promise<boolean>;
    scrollToTestElement(component?: WebdriverIO.Element): Promise<void>;
    mobileScrollToTestElement(componentIdentifier?: string): Promise<void>;
    waitForCondition(condition: () => Promise<boolean>, errorMsg?: string, timeout?: number, interval?: number): Promise<void>;
    didAssertPopup(): Promise<boolean>;
    /*****************************************/
    /**************** Getters ****************/
    /*****************************************/
    get _testPage(): Promise<WebdriverIO.Element>;
    get _primaryComponent(): Promise<WebdriverIO.Element>;
    get _secondaryComponent(): Promise<WebdriverIO.Element>;
    get _pageButton(): Promise<WebdriverIO.Element>;
    abstract get _pageName(): string;
    abstract get _pageButtonName(): string;
    get _primaryComponentName(): string;
    get _secondaryComponentName(): string;
    get _testPageButtonScrollViewer(): Promise<WebdriverIO.Element>;
    get _initialPage(): Promise<WebdriverIO.Element>;
    /****************** Error Messages ******************/
    get ERRORMESSAGE_SUFFIX(): string;
    get ERRORMESSAGE_APPLOAD(): string;
    get ERRORMESSAGE_PAGELOAD(): string;
    get ERRORMESSAGE_ASSERT(): string;
    private get _e2eSwitch();
    private get _e2eSection();
    waitForUiEvent: number;
}
export {};
//# sourceMappingURL=BasePage.d.ts.map