appium-espresso-driver
Version:
Espresso integration for Appium
169 lines • 8.68 kB
JavaScript
import { errors } from 'appium/driver.js';
import { util } from 'appium/support.js';
/**
* Flash the element with given id.
* durationMillis and repeatCount are optional
* @see https://github.com/appium/appium-espresso-driver?tab=readme-ov-file#mobile-flashelement
* @param elementId - The ID of the element to flash
* @param durationMillis - Optional duration in milliseconds for each flash
* @param repeatCount - Optional number of times to repeat the flash
* @returns Promise that resolves when the flash command is executed
*/
export async function mobileFlashElement(elementId, durationMillis, repeatCount) {
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${elementId}/flash`, 'POST', {
durationMillis,
repeatCount,
});
}
/**
* Dismisses the autofill UI for the given element.
* @see https://github.com/appium/appium-espresso-driver?tab=readme-ov-file#mobile-dismissautofill
* @param elementId - The ID of the element for which to dismiss autofill
* @returns Promise that resolves when the autofill is dismissed
*/
export async function mobileDismissAutofill(elementId) {
await this.espresso.jwproxy.command(`/session/:sessionId/appium/execute_mobile/${elementId}/dismiss_autofill`, 'POST', {});
}
/**
* Performs a swipe gesture on the given element.
* @see https://github.com/appium/appium-espresso-driver?tab=readme-ov-file#mobile-swipe
* @param elementId - The ID of the element to swipe
* @param direction - Optional swipe direction (e.g., 'up', 'down', 'left', 'right')
* @param swiper - Optional swiper configuration
* @param startCoordinates - Optional starting coordinates for the swipe
* @param endCoordinates - Optional ending coordinates for the swipe
* @param precisionDescriber - Optional precision describer for the swipe action
* @returns Promise that resolves when the swipe is completed
*/
export async function mobileSwipe(elementId, direction, swiper, startCoordinates, endCoordinates, precisionDescriber) {
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${elementId}/swipe`, 'POST', {
direction,
element: elementId,
swiper,
startCoordinates,
endCoordinates,
precisionDescriber,
});
}
/**
* Opens a drawer element (e.g., Navigation Drawer) with the specified gravity.
* @see https://github.com/appium/appium-espresso-driver?tab=readme-ov-file#mobile-opendrawer
* @param elementId - The ID of the drawer element to open
* @param gravity - Optional gravity value for drawer positioning (e.g., Gravity.START, Gravity.END)
* @returns Promise that resolves when the drawer is opened
*/
export async function mobileOpenDrawer(elementId, gravity) {
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${elementId}/open_drawer`, 'POST', { gravity });
}
/**
* Closes a drawer element (e.g., Navigation Drawer) with the specified gravity.
* @see https://github.com/appium/appium-espresso-driver?tab=readme-ov-file#mobile-closedrawer
* @param elementId - The ID of the drawer element to close
* @param gravity - Optional gravity value for drawer positioning (e.g., Gravity.START, Gravity.END)
* @returns Promise that resolves when the drawer is closed
*/
export async function mobileCloseDrawer(elementId, gravity) {
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${elementId}/close_drawer`, 'POST', { gravity });
}
/**
* Sets the date on a date picker element.
* @see https://github.com/appium/appium-espresso-driver?tab=readme-ov-file#mobile-setdate
* @param elementId - The ID of the date picker element
* @param year - The year to set (e.g., 2024)
* @param monthOfYear - The month to set (0-11, where 0 is January)
* @param dayOfMonth - The day of the month to set (1-31)
* @returns Promise that resolves when the date is set
*/
export async function mobileSetDate(elementId, year, monthOfYear, dayOfMonth) {
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${elementId}/set_date`, 'POST', {
year,
monthOfYear,
dayOfMonth,
});
}
/**
* Sets the time on a time picker element.
* @see https://github.com/appium/appium-espresso-driver?tab=readme-ov-file#mobile-settime
* @param elementId - The ID of the time picker element
* @param hours - The hour to set (0-23)
* @param minutes - The minute to set (0-59)
* @returns Promise that resolves when the time is set
*/
export async function mobileSetTime(elementId, hours, minutes) {
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${elementId}/set_time`, 'POST', {
hours,
minutes,
});
}
/**
* Navigates to a menu item in a navigation element (e.g., BottomNavigationView).
* @see https://github.com/appium/appium-espresso-driver?tab=readme-ov-file#mobile-navigateto
* @param elementId - The ID of the navigation element
* @param menuItemId - The ID of the menu item to navigate to (must be a non-negative number)
* @returns Promise that resolves when navigation is completed
* @throws {errors.InvalidArgumentError} If menuItemId is not a non-negative number
*/
export async function mobileNavigateTo(elementId, menuItemId) {
const menuItemIdAsNumber = parseInt(`${menuItemId}`, 10);
if (Number.isNaN(menuItemIdAsNumber) || menuItemIdAsNumber < 0) {
throw new errors.InvalidArgumentError(`'menuItemId' must be a non-negative number. Found ${menuItemId}`);
}
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${elementId}/navigate_to`, 'POST', { menuItemId });
}
/**
* Perform a 'GeneralClickAction' (https://developer.android.com/reference/androidx/test/espresso/action/GeneralClickAction)
*
* @see https://github.com/appium/appium-espresso-driver?tab=readme-ov-file#mobile-clickaction
* @param elementId - The ID of the element to perform the click action on
* @param tapper - Optional tapper configuration for the click action
* @param coordinatesProvider - Optional coordinates provider for the click position
* @param precisionDescriber - Optional precision describer for the click action
* @param inputDevice - Optional input device identifier
* @param buttonState - Optional button state for the click action
* @returns Promise that resolves when the click action is performed
*/
export async function mobileClickAction(elementId, tapper, coordinatesProvider, precisionDescriber, inputDevice, buttonState) {
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${elementId}/click_action`, 'POST', {
tapper,
coordinatesProvider,
precisionDescriber,
inputDevice,
buttonState,
});
}
/**
* Scrolls to a specific page in a ViewPager or similar scrollable element.
* @see https://github.com/appium/appium-espresso-driver?tab=readme-ov-file#mobile-scrolltopage
* @param elementId - The ID of the scrollable element (e.g., ViewPager)
* @param scrollTo - Optional direction to scroll: 'first', 'last', 'left', or 'right'
* @param scrollToPage - Optional page index to scroll to (must be non-negative)
* @param smoothScroll - Optional flag to enable smooth scrolling (default: false)
* @returns Promise that resolves when scrolling is completed
* @throws {errors.InvalidArgumentError} If scrollTo is not one of the valid values or scrollToPage is negative
*/
export async function mobileScrollToPage(elementId, scrollTo, scrollToPage, smoothScroll) {
const scrollToTypes = ['first', 'last', 'left', 'right'];
if (scrollTo && !scrollToTypes.includes(scrollTo)) {
throw new errors.InvalidArgumentError(`"scrollTo" must be one of "${scrollToTypes.join(', ')}" found '${scrollTo}'`);
}
if ((scrollToPage ?? 0) < 0) {
throw new errors.InvalidArgumentError(`"scrollToPage" must be a non-negative integer. Found '${scrollToPage}'`);
}
if (util.hasValue(scrollTo) && util.hasValue(scrollToPage)) {
this.log.warn(`'scrollTo' and 'scrollToPage' where both provided. Defaulting to 'scrollTo'`);
}
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${elementId}/scroll_to_page`, 'POST', {
scrollTo,
scrollToPage,
smoothScroll,
});
}
/**
* Performs an editor action (e.g., IME action like DONE, SEARCH, NEXT) on the current input field.
* @param action - The editor action to perform (can be a string or numeric action code)
* @returns Promise that resolves when the editor action is performed
*/
export async function mobilePerformEditorAction(action) {
await this.espresso.jwproxy.command('/appium/device/perform_editor_action', 'POST', { action });
}
//# sourceMappingURL=element.js.map