Driver and plugin installation, configuration, and lifecycle management for extending Appium's automation capabilities.
Access driver and plugin configurations through the Appium initialization process. Extension loading functions are internal to Appium and not directly exported from the main API.
Usage Examples:
import { init } from "appium";
// Initialize Appium to get access to extension configurations
const initResult = await init({ appiumHome: "/path/to/appium/home" });
const { driverConfig, pluginConfig } = initResult;
// Check installed extensions
console.log("Installed drivers:", driverConfig.installedExtensions);
console.log("Installed plugins:", pluginConfig.installedExtensions);
// Validate configurations
await driverConfig.validate();
await pluginConfig.validate();
// Print configuration information
driverConfig.print();
pluginConfig.print();Manage driver extension installation, validation, and configuration.
interface DriverConfig {
/** List of installed driver extensions */
installedExtensions: string[];
/** Validate driver configuration and installations */
validate(): Promise<void>;
/** Print driver status and information to console */
print(): void;
/** Get singleton instance for a manifest */
static getInstance(manifest: Manifest): DriverConfig | undefined;
/** Create new instance for a manifest */
static create(manifest: Manifest): DriverConfig;
}Usage Examples:
import { init } from "appium";
// Access driver configuration through init
const { driverConfig } = await init({ appiumHome });
// Check installed drivers
console.log("Installed drivers:", driverConfig.installedExtensions);
// Validate all drivers
await driverConfig.validate();
// Print driver information
driverConfig.print();Manage plugin extension installation, validation, and configuration.
interface PluginConfig {
/** List of installed plugin extensions */
installedExtensions: string[];
/** Validate plugin configuration and installations */
validate(): Promise<void>;
/** Print plugin status and information to console */
print(pluginClasses?: PluginClass[]): void;
/** Get singleton instance for a manifest */
static getInstance(manifest: Manifest): PluginConfig | undefined;
/** Create new instance for a manifest */
static create(manifest: Manifest): PluginConfig;
}Usage Examples:
import { init } from "appium";
// Access plugin configuration through init
const { pluginConfig } = await init({ appiumHome });
// Check installed plugins
console.log("Installed plugins:", pluginConfig.installedExtensions);
// Validate all plugins
await pluginConfig.validate();
// Print plugin information
pluginConfig.print();Manage the extension manifest file that tracks installed drivers and plugins.
interface Manifest {
/** Get singleton instance for Appium home directory */
static getInstance(appiumHome: string): Manifest;
/** Read manifest from filesystem */
read(): Promise<void>;
/** Write manifest to filesystem */
write(): Promise<void>;
}Usage Examples:
// Manifest is accessed internally through Appium initialization
// Direct manifest manipulation is typically not needed for end users
// Extensions are managed through CLI commands or init() results
import { init } from "appium";
const { driverConfig, pluginConfig, appiumHome } = await init();
// Extension configurations provide access to manifest data
console.log("Appium home:", appiumHome);
console.log("Configured drivers:", driverConfig.installedExtensions);
console.log("Configured plugins:", pluginConfig.installedExtensions);Execute CLI commands for extension management.
/**
* Execute extension CLI commands (driver/plugin install, list, etc.)
* @param args - Parsed CLI arguments
* @param config - Extension configuration (DriverConfig or PluginConfig)
* @returns Promise that resolves when command completes
*/
function runExtensionCommand(
args: ExtensionCommandArgs,
config: DriverConfig | PluginConfig
): Promise<void>;Usage Examples:
// Extension commands are primarily designed for CLI usage
// For programmatic usage, prefer using the CLI directly or init() results
// CLI usage (recommended):
// appium driver install uiautomator2
// appium plugin list
// For programmatic access to extension information:
import { init } from "appium";
const { driverConfig, pluginConfig } = await init();
// Check what's installed
console.log("Drivers:", driverConfig.installedExtensions);
console.log("Plugins:", pluginConfig.installedExtensions);
// Validate extensions
await driverConfig.validate();
await pluginConfig.validate();Appium provides official support for these platform drivers:
const KNOWN_DRIVERS: Record<string, string> = {
// Mobile drivers
"uiautomator2": "appium-uiautomator2-driver",
"xcuitest": "appium-xcuitest-driver",
"espresso": "appium-espresso-driver",
// Desktop drivers
"mac2": "appium-mac2-driver",
"windows": "appium-windows-driver",
// Browser drivers
"safari": "appium-safari-driver",
"gecko": "appium-geckodriver",
"chromium": "appium-chromium-driver"
};Appium provides official support for these plugins:
const KNOWN_PLUGINS: Record<string, string> = {
"images": "@appium/images-plugin",
"execute-driver": "@appium/execute-driver-plugin",
"relaxed-caps": "@appium/relaxed-caps-plugin",
"storage": "@appium/storage-plugin",
"universal-xml": "@appium/universal-xml-plugin"
};interface ExtensionConfigs {
driverConfig: DriverConfig;
pluginConfig: PluginConfig;
}
interface DriverNameMap extends Map<DriverClass, string> {}
interface PluginNameMap extends Map<PluginClass, string> {}
interface ExtensionCommandArgs {
subcommand: "driver" | "plugin";
driver?: DriverCommandArgs;
plugin?: PluginCommandArgs;
}
interface DriverCommandArgs {
subcommand: "list" | "install" | "uninstall" | "update" | "run" | "doctor";
driver?: string;
package?: string;
source?: "npm" | "git" | "github" | "local";
installType?: "npm" | "git" | "github" | "local";
}
interface PluginCommandArgs {
subcommand: "list" | "install" | "uninstall" | "update" | "run" | "doctor";
plugin?: string;
package?: string;
source?: "npm" | "git" | "github" | "local";
installType?: "npm" | "git" | "github" | "local";
}
interface DriverClass {
newMethodMap?: Record<string, Function>;
updateServer?: Function;
}
interface PluginClass {
newMethodMap?: Record<string, Function>;
updateServer?: Function;
}
interface ExternalDriver {
sessionId?: string;
[key: string]: any;
}