appium-android-driver
Version:
Android UiAutomator and Chrome support for Appium
235 lines (217 loc) • 6.96 kB
text/typescript
/* eslint-disable @typescript-eslint/no-unused-vars */
import {errors} from 'appium/driver';
import type {Position, Size} from '@appium/types';
import type {AndroidDriver} from '../driver';
import type {DoSetElementValueOpts} from './types';
/**
* Gets an attribute value from an element.
*
* @param attribute The name of the attribute to retrieve.
* @param elementId The element identifier.
* @returns Promise that resolves to the attribute value, or `null` if not found.
* @throws {errors.NotImplementedError} This method is not implemented.
*/
export async function getAttribute(
this: AndroidDriver,
attribute: string,
elementId: string,
): Promise<string | null> {
throw new errors.NotImplementedError('Not implemented');
}
/**
* Clicks on an element.
*
* @param elementId The element identifier.
* @returns Promise that resolves when the click is performed.
* @throws {errors.NotImplementedError} This method is not implemented.
*/
export async function click(
this: AndroidDriver,
elementId: string,
): Promise<void> {
throw new errors.NotImplementedError('Not implemented');
}
/**
* Gets the text content of an element.
*
* @param elementId The element identifier.
* @returns Promise that resolves to the element's text content.
* @throws {errors.NotImplementedError} This method is not implemented.
*/
export async function getText(
this: AndroidDriver,
elementId: string,
): Promise<string> {
throw new errors.NotImplementedError('Not implemented');
}
/**
* Gets the location of an element on the screen.
*
* @param elementId The element identifier.
* @returns Promise that resolves to the element's position (x, y coordinates).
* @throws {errors.NotImplementedError} This method is not implemented.
*/
export async function getLocation(
this: AndroidDriver,
elementId: string,
): Promise<Position> {
throw new errors.NotImplementedError('Not implemented');
}
/**
* Gets the size of an element.
*
* @param elementId The element identifier.
* @returns Promise that resolves to the element's size (width, height).
* @throws {errors.NotImplementedError} This method is not implemented.
*/
export async function getSize(
this: AndroidDriver,
elementId: string,
): Promise<Size> {
throw new errors.NotImplementedError('Not implemented');
}
/**
* Gets the class name of an element.
*
* @param elementId The element identifier.
* @returns Promise that resolves to the element's class name.
*/
export async function getName(
this: AndroidDriver,
elementId: string,
): Promise<string> {
return await this.getAttribute('className', elementId) as string;
}
/**
* Checks if an element is displayed.
*
* @param elementId The element identifier.
* @returns Promise that resolves to `true` if the element is displayed, `false` otherwise.
*/
export async function elementDisplayed(
this: AndroidDriver,
elementId: string,
): Promise<boolean> {
return (await this.getAttribute('displayed', elementId)) === 'true';
}
/**
* Checks if an element is enabled.
*
* @param elementId The element identifier.
* @returns Promise that resolves to `true` if the element is enabled, `false` otherwise.
*/
export async function elementEnabled(
this: AndroidDriver,
elementId: string,
): Promise<boolean> {
return (await this.getAttribute('enabled', elementId)) === 'true';
}
/**
* Checks if an element is selected.
*
* @param elementId The element identifier.
* @returns Promise that resolves to `true` if the element is selected, `false` otherwise.
*/
export async function elementSelected(
this: AndroidDriver,
elementId: string,
): Promise<boolean> {
return (await this.getAttribute('selected', elementId)) === 'true';
}
/**
* Sets the value of an element.
*
* @param keys The text to set, either as a string or an array of strings (which will be joined).
* @param elementId The element identifier.
* @param replace If `true`, replaces the existing value. If `false`, appends to it. Defaults to `false`.
* @returns Promise that resolves when the value is set.
*/
export async function setElementValue(
this: AndroidDriver,
keys: string | string[],
elementId: string,
replace = false,
): Promise<void> {
const text = keys instanceof Array ? keys.join('') : keys;
return await this.doSetElementValue({
elementId,
text: String(text),
replace,
});
}
/**
* Sets the value of an element.
*
* Reason for isolating doSetElementValue from setElementValue is for reusing setElementValue
* across android-drivers (like appium-uiautomator2-driver) and to avoid code duplication.
* Other android-drivers (like appium-uiautomator2-driver) need to override doSetElementValue
* to facilitate setElementValue.
*
* @param params The parameters for setting the element value.
* @returns Promise that resolves when the value is set.
* @throws {errors.NotImplementedError} This method is not implemented.
*/
export async function doSetElementValue(
this: AndroidDriver,
params: DoSetElementValueOpts,
): Promise<void> {
throw new errors.NotImplementedError('Not implemented');
}
/**
* Sets the value of an element (appends to existing value).
*
* @param keys The text to set, either as a string or an array of strings (which will be joined).
* @param elementId The element identifier.
* @returns Promise that resolves when the value is set.
*/
export async function setValue(
this: AndroidDriver,
keys: string | string[],
elementId: string,
): Promise<void> {
return await this.setElementValue(keys, elementId, false);
}
/**
* Replaces the value of an element.
*
* @param keys The text to set, either as a string or an array of strings (which will be joined).
* @param elementId The element identifier.
* @returns Promise that resolves when the value is replaced.
*/
export async function replaceValue(
this: AndroidDriver,
keys: string | string[],
elementId: string,
): Promise<void> {
return await this.setElementValue(keys, elementId, true);
}
/**
* Sets the value of an element immediately using ADB input.
*
* @param keys The text to set, either as a string or an array of strings (which will be joined).
* @param elementId The element identifier.
* @returns Promise that resolves when the value is set.
*/
export async function setValueImmediate(
this: AndroidDriver,
keys: string | string[],
elementId: string,
): Promise<void> {
const text = Array.isArray(keys) ? keys.join('') : keys;
// first, make sure we are focused on the element
await this.click(elementId);
// then send through adb
await this.adb.inputText(text);
}
/**
* Gets the location of an element relative to the view.
*
* @param elementId The element identifier.
* @returns Promise that resolves to the element's position (x, y coordinates).
*/
export async function getLocationInView(
this: AndroidDriver,
elementId: string,
): Promise<Position> {
return await this.getLocation(elementId);
}