Adb Built-ins¶
Adb Built-ins provide Adb functionality for local and remote phones, unless stated otherwise. They work with both Steps and UI Steps.
Note:
-
An
apk
's filename and the application's actual package name might differ. For example, filename:selendroid-test-app-0.17.0.apk
and package name:io.selendroid.testapp
. -
To find the package name for an
.apk
file, runaapt dump badging
from command line. The package name can be found in the output's first line aspackage: name='<packageName>'
. -
To list packages installed on a specific device, run
adb -s shell pm list packages
from the command line.
Feature File Example With Apk Handling Functions ¶
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Feature: Adb builtin Scenario: Use Adb builtin functions Given an Android phone as A And install the app "/home/bart/selendroid-test-app-0.17.0.apk" on A And start the app "io.selendroid.testapp" on A And wait for 5 seconds And stop the app "io.selendroid.testapp" on A And wait for 3 seconds And uninstall the app "io.selendroid.testapp" on A And grant permission "android.permission.WRITE_EXTERNAL_STORAGE" for app "com.my.app" on A And revoke permission "android.permission.WRITE_EXTERNAL_STORAGE" for app "com.my.app" on A And clear data of app "com.my.app" on A |
Check Which App is Running in the Foreground ¶
This function returns a string containing the name of the package for the application running in the foreground on the given device.
Syntax
1 | <foregroundApp String> := Adb.getForegroundApp(<phone Identifier>) |
Returns
The application running in the foreground.
Parameters
-
phone - The phone's identifier
-
foregroundApp - The app's identifier running in the foreground
Example
1 | appname := Adb.getForegroundApp(phoneA) |
Send Keycodes ¶
This function sends a keycode to a device. The keycode can be any of the codes that starts with KEYCODE_
listed on the Android Developer KeyEvent page. However, the KEYCODE_
prefix is omitted in intaQt's syntax.
Syntax
1 | Adb.sendKeyCode(<phone Phone>, <keycode String>) |
Parameter
- keycode - The keycode being sent
Functions Example
1 2 3 4 5 6 | homeKeycode := Adb.sendKeyCode(phone, "HOME") dpadUpKeycode := Adb.sendKeyCode(phone, "DPAD_UP") dpadDownKeycode := Adb.sendKeyCode(phone, "DPAD_DOWN") dpadRightKeycode := Adb.sendKeyCode(phone, "DPAD_RIGHT") dpadLeftKeycode := Adb.sendKeyCode(phone, "DPAD_LEFT") dpadEnterKeycode := Adb.sendKeyCode(phone, "ENTER") |
Stepdef Example
1 2 3 | stepdef "on {} press key {}" / phone, keyCode / Adb.sendKeyCode(phone, Keycode) end |
Feature File Example
1 2 3 4 5 6 7 8 9 10 11 12 13 | Feature: AdbBuiltin Scenario: Send Keycode # Prerequisites Given an Android phone as A # Execution And on A press key "HOME" And on A press key "MOVE_HOME" And on A press key "DPAD_RIGHT" And on A press key "DPAD_RIGHT" And on A press key "ENTER" |
Check the Application States ¶
This function retrieves information about application states (installed, missing, enabled, disabled or version).
Syntax
1 | <appInfoResult AdbResult> := Adb.getAppInfo(<phone Phone>, <packageName String>) |
Returns
An AppInfo
object, which has the following properties:
-
.isInstalled()
(Boolean) - True if the application is installed on the device, otherwise false -
.isMissing()
(Boolean) - True if the application is not installed on the device, otherwise false -
.isEnabled()
(Boolean) - True if the application is enabled on the device, otherwise false -
.isDisabled()
(Boolean) - True if the application is disabled on the device, otherwise false -
.version
(String) - The version of the application if it is installed on device, otherwise null
Parameter
- packageName - The application's package name
Example
1 2 3 4 5 6 | info := Adb.getAppInfo(phone, "com.android.browser") assert info.isInstalled() assert not info.isMissing() assert info.isEnabled() assert not info.isDisabled() println(info.version) |
Application and APK Handling ¶
These functions provide a set of functions to handle applications on Android devices. The ADB function below returns an AdbResult
that contains two properties:
-
success - A boolean value that indicates if the ADB command was successful
true
for success andfalse
for failure
-
output - The string that contains additional information in case of a failure
- In most cases, the output of the low level ADB command is provided
Start The App ¶
Starts the application on the specified phone.
Syntax
1 | <startAppResult AdbResult> := Adb.startApp(<phone Phone>, <packageName String>) |
Returns
The ADB result containing the success
and output
properties for the started apk
.
Parameters
-
phone - The phone on which the application is being started
-
packageName - The application's package name
Example
1 2 3 4 5 | stepdef "start browser on {}" / phone / result := Adb.startApp(phone, "com.android.browser") println("result.success=" + result.success) println("result.output=" + result.output) end |
Stop The App ¶
Stops the application on the specified phone.
Syntax
1 | <stopAppResult AdbResult> := Adb.stopApp(<phone Phone>, <packageName String>) |
Returns
The ADB result containing the success
and output
properties for the stop apk
.
Parameters
-
phone - The phone on which the application is being stopped
-
packageName - The application's package name
Example
1 2 3 4 5 | stepdef "stop browser on {}" / phone / result := Adb.stopApp(phone, "com.android.browser") println("result.success=" + result.success) println("result.output=" + result.output) end |
Clear Application Data ¶
Clears application data from the phone.
Syntax
1 2 | <clearAppResult AdbResult> := Adb.clearDataOfApp(<phone Phone>, <packageName String>) |
Returns
The ADB's result containing the success
and output
properties for the clear data operation.
Parameter
- packageName - The application's package name
Example
1 2 3 4 5 | stepdef "clear data of app {} on {}" / appName, phone / result := Adb.clearDataOfApp(phone, appName) println("result.success=" + result.success) println("result.output=" + result.output) end |
Install an APK ¶
Installs an APK on the phone.
Syntax
1 | <installAppResult AdbResult> := Adb.installApp(<phone Phone>, <apkPath String>) |
Returns
The ADB's result containing the success
and output
properties for the installed APK.
Parameter
- apkPath - The APK's path, for example,
/home/bart/myTestApp.apk
Example
1 2 3 4 5 | stepdef "install apk on {}" / phone / result := Adb.installApp(phone, "../apks/myApk.apk") println("result.success=" + result.success) println("result.output=" + result.output) end |
Reinstall an APK ¶
Reinstalls packages on phones.
Syntax
1 | <reinstallAppResult AdbResult> := Adb.reinstallApp(<phone Phone>, <apkPath String>) |
Returns
The ADB's result of the reinstall function containing the success
and output
properties.
Parameter
- apkPath - The
apk
's path
Example Stepdef
1 2 3 4 5 | stepdef "reinstall the app on {}" / phone / result := Adb.reinstallApp(phone, "../apks/myApk.apk") println("result.success=" + result.success) println("result.output=" + result.output) end |
Install Multiple Apps ¶
Installs multiple APKs if the APKs are obtained by extraction from a device that already has an .aab file installed.
Syntax
1 | Adb.installMultipleApps(<phone Phone>, appPaths List<String>>, <installOptions List<String>>, <timeoutSeconds Number>) |
Parameters
-
phone - The phone object
-
appPaths - The paths to APK files
base.apk
should be the first APK in the appPaths list
-
installOptions (Optional) - Additional options for install operation
-
timeoutSeconds (Optional) - Timeout in seconds
- Default value is set to 300
Example
1 2 3 4 5 6 7 8 | Adb.installMultipleApps( phone, [ "/Users/qitasc/Downloads/base.apk", "/Users/qitasc/Downloads/split_config.arm64_v8a.apk", "/Users/qitasc/Downlaods/split_config.de.apk" ] ) |
Reinstall Multiple Apps ¶
Reinstalls multiple APKs if the APKs are obtained by extraction from a device that already has an .aab file installed.
Syntax
1 | Adb.reinstallMultipleApps(<phone Phone>, <appPaths List<String>>, <installOptions List<String>>, <timeoutSeconds Number>) |
Parameters
-
phone - The phone object
-
appPaths - The paths to APK files
base.apk
should be the first APK in the appPaths list
-
installOptions (Optional) - Additional options for install operation
-
timeoutSeconds (Optional) - Timeout in seconds
- Default value is set to 300
Example
1 2 3 4 5 6 7 8 | Adb.reinstallMultipleApps( phone, [ "/Users/qitasc/Downloads/base.apk", "/Users/qitasc/Downloads/split_config.arm64_v8a.apk", "/Users/qitasc/Downlaods/split_config.de.apk" ] ) |
Uninstall an App ¶
Uninstalls an application with the specified package name from the phone.
Syntax
1 2 | <uninstallAppResult AdbResult> := Adb.uninstallApp(<phone Phone>, <packagename String>) |
Returns
The ADB result containing the success
and output
properties for the uninstall operation.
Parameter
- packageName - The application's package name
Example
1 2 3 4 5 | stepdef "uninstall spotify on {}" / phone / result := Adb.uninstallApp(phone, "com.spotify.music") println("result.success=" + result.success) println("result.output=" + result.output) end |
Grant Android Permissions ¶
Grants Android permissions to the application. Permission can only be granted for applications with a targetSdk
of 22
or above. A list of permissions is available in the Android documentation.
Syntax
1 2 | <grantPermissionResult AdbResult> := Adb.grantPermission(<phone Phone>, <packageName String>, <perm Permission>) |
Returns
The ADB result containing the success
and output
properties for the grant permission operation.
Parameters
-
phone - The phone on which permission is granted
-
packageName - The application's package name
-
perm - An Android permission
- For example,
android.permission.WRITE_EXTERNAL_STORAGE
- For example,
Example
1 2 3 4 5 | stepdef "grant permission {} for app {} on {}" / perm, appName, phone / result := Adb.grantPermission(phone, appName, perm) println("result.success=" + result.success) println("result.output=" + result.output) end |
Revoke Android Permissions ¶
Revokes Android permissions to the application. Permission can only be revoked for applications with a targetSdk
of 22
or above. A list of permissions is available in the Android documentation.
Syntax
1 2 | <revokePermission Result Adbresult> := Adb.revokePermission(<phone Phone>, <packagename String>, <perm Permission>) |
Returns
The ADB result containing the success
and output
properties for the revoke permission operation.
Parameters
-
phone - The phone on which permission is revoked
-
packageName - The application's package name
-
perm - An Android permission
- For example,
android.permission.WRITE_EXTERNAL_STORAGE
- For example,
Example
1 2 3 4 5 | stepdef "revoke permission {} for app {} on {}" / perm, appName, phone / result := Adb.revokePermission(phone, appName, perm) println("result.success=" + result.success) println("result.output=" + result.output) end |
Enter Shell Commands ¶
Executes an adb
shell command on an Android device and returns the result as a string.
Syntax
1 | <returnedString String> := Adb.shellCommand(<phone Phone>, <command String>) |
Returns
The function's result as a string.
Parameter
- command - The command to execute
Example
1 2 3 4 | stepdef "open the call screen on {}" / phone / result := Adb.shellCommand(phone, "input keyevent KEYCODE_CALL") result.writeToProtocol() end |
Pull (Download) File ¶
Downloads a file from an Android device's filesystem.
Syntax
1 | <returnedFile File> := Adb.pull(<identifier Phone>, <absolutePath String>) |
Returns
The downloaded file.
Parameter
- absolutePath - The absolute path of the file to be downloaded
Example
1 | myFile := Adb.pull(A, "/storage/sdcard0/test.txt") |