pub struct AndroidCapabilities { /* private fields */ }
Expand description

Android capabilities

Implementations§

source§

impl AndroidCapabilities

source

pub fn new() -> AndroidCapabilities

Creates new empty capability set for Android (with driver autoselected by Appium).

Examples found in repository?
examples/find_by.rs (line 13)
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Capabilities describe the automation environment,
    // for example: what app are we testing
    let mut capabilities = AndroidCapabilities::new();
    capabilities.app("https://github.com/appium/android-apidemos/releases/download/v3.1.0/ApiDemos-debug.apk");

    // To add custom capability that is not supported by this library just use "insert".
    // Alternatively, there are helpful functions like "set_bool", "set_str".
    // You can read more about capabilities on Appium website - https://appium.io/docs/en/2.1/guides/caps/.
    capabilities.set_str("appium:automationName", "uiautomator2");
    capabilities.set_bool("appium:fullReset", true);

    // To start automation, you need to build a client.
    let client = ClientBuilder::native(capabilities)
        .connect("http://localhost:4723/")
        .await?;

    // The app should automatically start, let's print the DOM of current app screen.
    let value = client.source().await?;
    println!("{value}");

    // Screen orientation is another Appium perk
    let orientation = client.orientation().await?;
    println!("Screen orientation: {orientation}");

    // Now we try to locate a button using UiAutomator API.
    // Notice that the program will wait until the button appears on screen (but maximum of 30 seconds).
    let views_button = client
        .appium_wait()
        .for_element(By::uiautomator("new UiSelector().text(\"Views\");"))
        .await?;

    views_button.click().await?;

    // Search for a vec of elements, because we know that there will be more than one result.
    // Notice that this time we don't wait, just find everything that's on screen as is.
    let menu_elements = client
        .find_all_by(By::uiautomator("new UiSelector().className(\"android.widget.TextView\");"))
        .await?;

    menu_elements.get(1)
        .unwrap()
        .click()
        .await?;

    // To add a timeout for wait, use "at_most".
    // "check_every" limits how often Appium has to perform the search during wait.
    //
    // Sometimes it's better to use one or both of those methods, because:
    // 1) We know that something should appear sooner, and if it doesn't, we don't want to wait full 30 seconds.
    // 2) We don't want to slow down Appium server by checking again too often.
    let element = client
        .appium_wait()
        .at_most(Duration::from_secs(20))
        .check_every(Duration::from_millis(500))
        .for_element(By::class_name("android.widget.ListView"))
        .await?;

    // This is a simple search for one element, without waiting for it to appear. And then we click on it.
    // Notice that we are searching for an element inside "element" (which is a ListView).
    element
        .find_by(By::accessibility_id("3D Transition"))
        .await?
        .click()
        .await?;

    Ok(())
}
source

pub fn new_uiautomator() -> AndroidCapabilities

Creates empty capability set for UiAutomator2 Android driver.

Examples found in repository?
examples/scroll.rs (line 10)
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut capabilities = AndroidCapabilities::new_uiautomator();
    capabilities.app("https://github.com/appium/android-apidemos/releases/download/v3.1.0/ApiDemos-debug.apk");

    let client = ClientBuilder::native(capabilities)
        .connect("http://localhost:4723/")
        .await?;

    // Go to a screen with a long list
    client.find_by(By::accessibility_id("Views"))
        .await?
        .click()
        .await?;

    // Let's calculate some things first
    let (width, height) = client.get_window_size().await?;

    // This is the horizontal center, it will be our x for swipe.
    let horizontal_center = (width / 2) as i64;

    // The swipe will start at 80% of screen height, and end at 20% of screen height.
    // So we will swipe UP through most of the screen.
    let almost_top = (height as f64 * 0.2) as i64;
    let almost_bottom = (height as f64 * 0.8) as i64;

    let swipe_down = TouchActions::new("finger".to_string())
        // position the finger first
        .then(PointerAction::MoveTo {
            duration: Some(Duration::from_millis(0)),
            x: horizontal_center,
            y: almost_bottom,
        })
        // THEN touch the screen
        .then(PointerAction::Down {
            button: MOUSE_BUTTON_LEFT // believe me, it is not a mouse, but a simple touch
        })
        // THEN move the finger through the screen
        .then(PointerAction::MoveTo {
            duration: Some(Duration::from_millis(500)),
            x: horizontal_center,
            y: almost_top,
        });

    client.perform_actions(swipe_down)
        .await?;

    Ok(())
}
source

pub fn new_espresso() -> AndroidCapabilities

Creates empty capability set for Espresso Android driver.

Trait Implementations§

source§

impl AppCapable for AndroidCapabilities

source§

fn app(&mut self, app_path: &str)

The path to an installable application.
source§

fn other_apps(&mut self, paths: &[&str])

App or list of apps (as a JSON array) to install prior to running tests. Read more
source§

fn no_reset(&mut self, no_reset: bool)

Don’t reset app state before this session. Read more
source§

fn full_reset(&mut self, full_reset: bool)

Perform a complete reset. Read more
source§

fn print_page_source_on_find_failure(&mut self, value: bool)

When a find operation fails, print the current page source. Defaults to false. Read more
source§

impl AppiumCapability for AndroidCapabilities

source§

fn automation_name(&mut self, automation_name: &str)

Set the automation driver to use (the engine for tests, eg. XCuiTest for iOS). Read more
source§

fn platform_version(&mut self, version: &str)

The version of a platform, e.g., for iOS, “16.0”
source§

fn device_name(&mut self, device_name: &str)

The name of a particular device to automate. Read more
source§

fn set_str(&mut self, name: &str, value: &str)

Sets a string capability. Read more
source§

fn set_number(&mut self, name: &str, value: Number)

Sets a number capability. Read more
source§

fn set_bool(&mut self, name: &str, value: bool)

Sets a boolean capability. Read more
source§

impl AppiumSettingsCapable for AndroidCapabilities

source§

fn set_setting(&mut self, name: &str, value: Value)

source§

impl Clone for AndroidCapabilities

source§

fn clone(&self) -> AndroidCapabilities

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AndroidCapabilities

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for AndroidCapabilities

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl Deref for AndroidCapabilities

§

type Target = Map<String, Value>

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl DerefMut for AndroidCapabilities

source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
source§

impl From<AndroidCapabilities> for Capabilities

source§

fn from(value: AndroidCapabilities) -> Self

Converts to this type from the input type.
source§

impl HasBattery<AndroidCapabilities> for AndroidClient

source§

fn battery_info<'life0, 'async_trait>( &'life0 self ) -> Pin<Box<dyn Future<Output = Result<BatteryInfo<Caps>, CmdError>> + Send + 'async_trait>>
where Self: Sync + 'async_trait, 'life0: 'async_trait,

source§

impl PartialEq for AndroidCapabilities

source§

fn eq(&self, other: &AndroidCapabilities) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl UdidCapable for AndroidCapabilities

source§

fn udid(&mut self, udid: &str)

Device id. Read more
source§

impl UiAutomator2AppCompatible for AndroidCapabilities

source§

fn app_activity(&mut self, activity: &str)

Activity name for the Android activity you want to launch from your package. Read more
source§

fn app_package(&mut self, activity: &str)

Java package of the Android app you want to run. Read more
source§

fn app_wait_activity(&mut self, activity: &str)

Activity name/names, comma separated, for the Android activity you want to wait for. Read more
source§

fn app_wait_package(&mut self, activity: &str)

Java package of the Android app you want to wait for. Read more
source§

fn app_wait_duration(&mut self, duration: Duration)

Timeout in milliseconds used to wait for the appWaitActivity to launch (default 20000)
source§

fn android_install_timeout(&mut self, duration: Duration)

Timeout in milliseconds used to wait for an apk to install to the device. Defaults to 90000
source§

fn app_wait_for_launch(&mut self, value: bool)

Block until app starts. Read more
source§

fn force_app_launch(&mut self, value: bool)

Always start app forcefully when testing starts. Read more
source§

fn auto_launch(&mut self, value: bool)

Whether to launch the application under test automatically after a test starts. Read more
source§

fn intent_category(&mut self, value: &str)

Set an optional intent category to be applied when starting the given appActivity by Activity Manager. Read more
source§

fn intent_action(&mut self, value: &str)

Set an optional intent action to be applied when starting the given appActivity by Activity Manager. Read more
source§

fn intent_flags(&mut self, value: &str)

Set an optional intent flags to be applied when starting the given appActivity by Activity Manager. Read more
source§

fn optional_intent_arguments(&mut self, value: &str)

Set an optional intent arguments to be applied when starting the given appActivity by Activity Manager
source§

fn dont_stop_app_on_reset(&mut self, value: bool)

Set it to true if you don’t want the application to be restarted if it was already running. Read more
source§

fn uninstall_other_packages(&mut self, value: &str)

Allows to set one or more comma-separated package identifiers to be uninstalled from the device before a test starts.
source§

fn remote_apps_cache_limit(&mut self, value: u64)

Sets the maximum amount of application packages to be cached on the device under test. Read more
source§

fn allow_test_packages(&mut self, value: bool)

Use packages built with test flag. Read more
source§

fn enforce_app_install(&mut self, value: bool)

Reinstall app (even if it’s a downgrade). Read more
source§

impl Eq for AndroidCapabilities

source§

impl StructuralEq for AndroidCapabilities

source§

impl StructuralPartialEq for AndroidCapabilities

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more