/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License", destination); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { Locator, WebElement } from 'selenium-webdriver'; import { AbstractElement } from './AbstractElement'; /** * Heavily inspired by https://stackoverflow.com/a/65418734 */ type Constructor = new (...args: any[]) => T; /** * The interface that a class is required to have in order to use the Webview mixin. */ interface WebviewMixable extends AbstractElement { getViewToSwitchTo(): Promise; } /** * The interface that is exposed by applying this mixin. */ export interface WebviewMixinType { findWebElement(locator: Locator): Promise; findWebElements(locator: Locator): Promise; switchToFrame(timeout?: number): Promise; switchBack(): Promise; } /** * Returns a class that has the ability to access a webview. * * @param Base the class to mixin * @returns a class that has the ability to access a webview */ export default function >(Base: TBase): Constructor & WebviewMixinType>; export {};