Struct AndroidCapabilities

Source
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)
10async fn main() -> Result<(), Box<dyn std::error::Error>> {
11    // Capabilities describe the automation environment,
12    // for example: what app are we testing
13    let mut capabilities = AndroidCapabilities::new();
14    capabilities.app("https://github.com/appium/android-apidemos/releases/download/v3.1.0/ApiDemos-debug.apk");
15
16    // To add custom capability that is not supported by this library just use "insert".
17    // Alternatively, there are helpful functions like "set_bool", "set_str".
18    // You can read more about capabilities on Appium website - https://appium.io/docs/en/2.1/guides/caps/.
19    capabilities.set_str("appium:automationName", "uiautomator2");
20    capabilities.set_bool("appium:fullReset", true);
21
22    // To start automation, you need to build a client.
23    let client = ClientBuilder::native(capabilities)
24        .connect("http://localhost:4723/")
25        .await?;
26
27    // The app should automatically start, let's print the DOM of current app screen.
28    let value = client.source().await?;
29    println!("{value}");
30
31    // Screen orientation is another Appium perk
32    let orientation = client.orientation().await?;
33    println!("Screen orientation: {orientation}");
34
35    // Now we try to locate a button using UiAutomator API.
36    // Notice that the program will wait until the button appears on screen (but maximum of 30 seconds).
37    let views_button = client
38        .appium_wait()
39        .for_element(By::uiautomator("new UiSelector().text(\"Views\");"))
40        .await?;
41
42    views_button.click().await?;
43
44    // Search for a vec of elements, because we know that there will be more than one result.
45    // Notice that this time we don't wait, just find everything that's on screen as is.
46    let menu_elements = client
47        .find_all_by(By::uiautomator("new UiSelector().className(\"android.widget.TextView\");"))
48        .await?;
49
50    menu_elements.get(1)
51        .unwrap()
52        .click()
53        .await?;
54
55    // To add a timeout for wait, use "at_most".
56    // "check_every" limits how often Appium has to perform the search during wait.
57    //
58    // Sometimes it's better to use one or both of those methods, because:
59    // 1) We know that something should appear sooner, and if it doesn't, we don't want to wait full 30 seconds.
60    // 2) We don't want to slow down Appium server by checking again too often.
61    let element = client
62        .appium_wait()
63        .at_most(Duration::from_secs(20))
64        .check_every(Duration::from_millis(500))
65        .for_element(By::class_name("android.widget.ListView"))
66        .await?;
67
68    // This is a simple search for one element, without waiting for it to appear. And then we click on it.
69    // Notice that we are searching for an element inside "element" (which is a ListView).
70    element
71        .find_by(By::accessibility_id("3D Transition"))
72        .await?
73        .click()
74        .await?;
75
76    Ok(())
77}
Source

pub fn new_uiautomator() -> AndroidCapabilities

Creates empty capability set for UiAutomator2 Android driver.

Examples found in repository?
examples/scroll.rs (line 10)
9async fn main() -> Result<(), Box<dyn std::error::Error>> {
10    let mut capabilities = AndroidCapabilities::new_uiautomator();
11    capabilities.app("https://github.com/appium/android-apidemos/releases/download/v3.1.0/ApiDemos-debug.apk");
12
13    let client = ClientBuilder::native(capabilities)
14        .connect("http://localhost:4723/")
15        .await?;
16
17    // Go to a screen with a long list
18    client.find_by(By::accessibility_id("Views"))
19        .await?
20        .click()
21        .await?;
22
23    // Let's calculate some things first
24    let (width, height) = client.get_window_size().await?;
25
26    // This is the horizontal center, it will be our x for swipe.
27    let horizontal_center = (width / 2) as i64;
28
29    // The swipe will start at 80% of screen height, and end at 20% of screen height.
30    // So we will swipe UP through most of the screen.
31    let almost_top = (height as f64 * 0.2) as i64;
32    let almost_bottom = (height as f64 * 0.8) as i64;
33
34    let swipe_down = TouchActions::new("finger".to_string())
35        // position the finger first
36        .then(PointerAction::MoveTo {
37            duration: Some(Duration::from_millis(0)),
38            x: horizontal_center,
39            y: almost_bottom,
40        })
41        // THEN touch the screen
42        .then(PointerAction::Down {
43            button: MOUSE_BUTTON_LEFT // believe me, it is not a mouse, but a simple touch
44        })
45        // THEN move the finger through the screen
46        .then(PointerAction::MoveTo {
47            duration: Some(Duration::from_millis(500)),
48            x: horizontal_center,
49            y: almost_top,
50        });
51
52    client.perform_actions(swipe_down)
53        .await?;
54
55    Ok(())
56}
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 duplicate 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

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

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 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

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

Source§

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>,

Source§

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>,

Source§

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
Source§

impl<T> ErasedDestructor for T
where T: 'static,