airtest.core.android.adb module

class ADB(serialno=None, adb_path=None, server_addr=None, display_id=None, input_event=None)[source]

Bases: object

adb client object class

status_device = 'device'
status_offline = 'offline'
SHELL_ENCODING = 'utf-8'
static get_adb_path()[source]

Returns the path to the adb executable.

Checks if adb process is running, returns the running process path.

If adb process is not running, checks if ANDROID_HOME environment variable is set. Constructs the adb path using ANDROID_HOME and returns it if set.

If adb process is not running and ANDROID_HOME is not set, uses built-in adb path.

Returns:

The path to the adb executable.

Return type:

str

static builtin_adb_path()[source]

Return built-in adb executable path

Returns:

adb executable path

start_server()[source]

Perform adb start-server command to start the adb server

Returns:

None

kill_server()[source]

Perform adb kill-server command to kill the adb server

Returns:

None

version()[source]

Perform adb version command and return the command output

Returns:

command output

start_cmd(cmds, device=True)[source]

Start a subprocess with adb command(s)

Parameters:
  • cmds – command(s) to be run

  • device – if True, the device serial number must be specified by -s serialno argument

Raises:

RuntimeError – if device is True and serialno is not specified

Returns:

a subprocess

cmd(cmds, device=True, ensure_unicode=True, timeout=None)[source]

Run the adb command(s) in subprocess and return the standard output

Parameters:
  • cmds – command(s) to be run

  • device – if True, the device serial number must be specified by -s serialno argument

  • ensure_unicode – encode/decode unicode of standard outputs (stdout, stderr)

  • timeout – timeout in seconds

Raises:
Returns:

command(s) standard output (stdout)

close_proc_pipe(proc)[source]

close stdin/stdout/stderr of subprocess.Popen.

devices(state=None)[source]

Perform adb devices command and return the list of adb devices

Parameters:

state – optional parameter to filter devices in specific state

Returns:

list od adb devices

connect(force=False)[source]

Perform adb connect command, remote devices are preferred to connect first

Parameters:

force – force connection, default is False

Returns:

None

disconnect()[source]

Perform adb disconnect command

Returns:

None

get_status()[source]

Perform adb get-state and return the device status

Raises:

AdbError – if status cannot be obtained from the device

Returns:

None if status is not found, otherwise return the standard output from adb get-state command

wait_for_device(timeout=5)[source]

Perform adb wait-for-device command

Parameters:

timeout – time interval in seconds to wait for device

Raises:

DeviceConnectionError – if device is not available after timeout

Returns:

None

start_shell(cmds)[source]

Handle adb shell command(s)

Parameters:

cmds – adb shell command(s)

Returns:

None

raw_shell(cmds, ensure_unicode=True)[source]

Handle adb shell command(s) with unicode support

Parameters:
  • cmds – adb shell command(s)

  • ensure_unicode – decode/encode unicode True or False, default is True

Returns:

command(s) output

shell(cmd)[source]

Run the adb shell command on the device

Parameters:

cmd – a command to be run

Raises:

AdbShellError – if command return value is non-zero or if any other AdbError occurred

Returns:

command output

keyevent(keyname)[source]

Perform adb shell input keyevent command on the device

Parameters:

keyname – key event name

Returns:

None

getprop(key, strip=True)[source]

Perform adb shell getprop on the device

Parameters:
  • key – key value for property

  • strip – True or False to strip the return carriage and line break from returned string

Returns:

propery value

property sdk_version

Get the SDK version from the device

Returns:

SDK version

push(local, remote)[source]

Perform adb push command

Note

If there is a space (or special symbol) in the file name, it will be forced to add escape characters, and the new file name will be added with quotation marks and returned as the return value

注意:文件名中如果带有空格(或特殊符号),将会被强制增加转义符,并将新的文件名添加引号,作为返回值返回

Parameters:
  • local – local file to be copied to the device

  • remote – destination on the device where the file will be copied

Returns:

The file path saved in the phone may be enclosed in quotation marks, eg. ‘“testfile.txt”’

Examples

>>> adb = device().adb
>>> adb.push("test.txt", "/data/local/tmp")
>>> new_name = adb.push("test space.txt", "/data/local/tmp")  # test the space in file name
>>> print(new_name)
"/data/local/tmp/test\ space.txt"
>>> adb.shell("rm " + new_name)
pull(remote, local)[source]

Perform adb pull command

Parameters:
  • remote – remote file to be downloaded from the device

  • local – local destination where the file will be downloaded from the device

Note

If <=PY3, the path in Windows cannot be the root directory, and cannot contain symbols such as /g in the path 注意:如果低于PY3,windows中路径不能为根目录,并且不能包含/g等符号在路径里

Returns:

None

forward(local, remote, no_rebind=True)[source]

Perform adb forward command

Parameters:
  • local – local tcp port to be forwarded

  • remote – tcp port of the device where the local tcp port will be forwarded

  • no_rebind – True or False

Returns:

None

get_forwards()[source]

Perform `adb forward –list`command

Yields:

serial number, local tcp port, remote tcp port

Returns:

None

classmethod get_available_forward_local()[source]

Generate a pseudo random number between 11111 and 20000 that will be used as local forward port

Returns:

integer between 11111 and 20000

Note

use forward –no-rebind to check if port is available

setup_forward(device_port, no_rebind=True)[source]

Generate pseudo random local port and check if the port is available.

Parameters:
  • device_port – it can be string or the value of the function(localport), e.g. “tcp:5001” or “localabstract:{}”.format

  • no_rebind – adb forward –no-rebind option

Returns:

local port and device port

remove_forward(local=None)[source]

Perform adb forward –remove command

Parameters:

local – local tcp port

Returns:

None

install_app(filepath, replace=False, install_options=None)[source]

Perform adb install command

Parameters:
  • filepath – full path to file to be installed on the device

  • replace

    force to replace existing application, default is False

    e.g.[“-t”, # allow test packages

    ”-l”, # forward lock application, “-s”, # install application on sdcard, “-d”, # allow version code downgrade (debuggable packages only) “-g”, # grant all runtime permissions

    ]

Returns:

command output

install_multiple_app(filepath, replace=False, install_options=None)[source]

Perform adb install-multiple command

Parameters:
  • filepath – full path to file to be installed on the device

  • replace – force to replace existing application, default is False

  • install_options

    list of options e.g.[“-t”, # allow test packages

    ”-l”, # forward lock application, “-s”, # install application on sdcard, “-d”, # allow version code downgrade (debuggable packages only) “-g”, # grant all runtime permissions “-p”, # partial application install (install-multiple only)

    ]

Returns:

command output

pm_install(filepath, replace=False, install_options=None)[source]

Perform adb push and adb install commands

Note

This is more reliable and recommended way of installing .apk files

Parameters:
  • filepath – full path to file to be installed on the device

  • replace – force to replace existing application, default is False

  • install_options

    list of options e.g.[“-t”, # allow test packages

    ”-l”, # forward lock application, “-s”, # install application on sdcard, “-d”, # allow version code downgrade (debuggable packages only) “-g”, # grant all runtime permissions

    ]

Returns:

None

uninstall_app(package)[source]

Perform adb uninstall command :param package: package name to be uninstalled from the device

Returns:

command output

pm_uninstall(package, keepdata=False)[source]

Perform adb uninstall command and delete all related application data

Parameters:
  • package – package name to be uninstalled from the device

  • keepdata – True or False, keep application data after removing the app from the device

Returns:

command output

snapshot()[source]

Take the screenshot of the device display

Returns:

command output (stdout)

touch(tuple_xy)[source]

Perform user input (touchscreen) on given coordinates

Parameters:

tuple_xy – coordinates (x, y)

Returns:

None

swipe(tuple_x0y0, tuple_x1y1, duration=500)[source]

Perform user input (swipe screen) from start point (x,y) to end point (x,y)

Parameters:
  • tuple_x0y0 – start point coordinates (x, y)

  • tuple_x1y1 – end point coordinates (x, y)

  • duration – time interval for action, default 500

Raises:

AirtestError – if SDK version is not supported

Returns:

None

logcat(grep_str='', extra_args='', read_timeout=10)[source]

Perform adb shell logcat command and search for given patterns

Parameters:
  • grep_str – pattern to filter from the logcat output

  • extra_args – additional logcat arguments

  • read_timeout – time interval to read the logcat, default is 10

Yields:

logcat lines containing filtered patterns

Returns:

None

exists_file(filepath)[source]

Check if the file exits on the device

Parameters:

filepath – path to the file

Returns:

True or False if file found or not

file_size(filepath)[source]

Get the file size

Parameters:

filepath – path to the file

Returns:

The file size

Raises:

AdbShellError if no such file

property line_breaker

Set carriage return and line break property for various platforms and SDK versions

Returns:

carriage return and line break string

property display_info

Set device display properties (orientation, rotation and max values for x and y coordinates)

Notes: if there is a lock screen detected, the function tries to unlock the device first

Returns:

device screen properties

get_display_info()[source]

Get information about device physical display (orientation, rotation and max values for x and y coordinates)

Returns:

device screen properties e.g {

’width’: 1440, ‘height’: 2960, ‘density’: 4.0, ‘orientation’: 3, ‘rotation’: 270, ‘max_x’: 4095, ‘max_y’: 4095

}

getMaxXY()[source]

Get device display maximum values for x and y coordinates

Returns:

max x and max y coordinates

getRestrictedScreen()[source]

Get value for mRestrictedScreen (without black border / virtual keyboard)`

Returns:

screen resolution mRestrictedScreen value as tuple (x, y)

getPhysicalDisplayInfo()[source]

Get value for display dimension and density from mPhysicalDisplayInfo value obtained from dumpsys command.

Returns:

physical display info for dimension and density

getDisplayOrientation()[source]

Another way to get the display orientation, this works well for older devices (SDK version 15)

Returns:

display orientation information

update_cur_display(display_info)[source]

Some phones support resolution modification, try to get the modified resolution from dumpsys adb shell dumpsys window displays | find “cur=”

本方法虽然可以更好地获取到部分修改过分辨率的手机信息 但是会因为cur=(d+)x(d+)的数值在不同设备上width和height的顺序可能不同,导致横竖屏识别出现问题 airtest不再使用本方法作为通用的屏幕尺寸获取方法,但依然可用于部分设备获取当前被修改过的分辨率

Examples

>>> # 部分三星和华为设备,若分辨率没有指定为最高,可能会导致点击偏移,可以用这个方式强制修改:
>>> # For some Samsung and Huawei devices, if the resolution is not specified as the highest,
>>> # it may cause click offset, which can be modified in this way:
>>> dev = device()
>>> info = dev.display_info
>>> info2 = dev.adb.update_cur_display(info)
>>> dev.display_info.update(info2)
Parameters:

display_info – the return of self.getPhysicalDisplayInfo()

Returns:

display_info

get_top_activity()[source]

Perform adb shell dumpsys activity top command search for the top activity

Raises:

AirtestError – if top activity cannot be obtained

Returns:

(package_name, activity_name, pid)

Return type:

top activity as a tuple

is_keyboard_shown()[source]

Perform adb shell dumpsys input_method command and search for information if keyboard is shown

Returns:

True or False whether the keyboard is shown or not

is_screenon()[source]

Perform adb shell dumpsys window policy command and search for information if screen is turned on or off

Raises:

AirtestError – if screen state can’t be detected

Returns:

True or False whether the screen is turned on or off

is_locked()[source]

Perform adb shell dumpsys window policy command and search for information if screen is locked or not

Raises:

AirtestError – if lock screen can’t be detected

Returns:

True or False whether the screen is locked or not

unlock()[source]

Perform adb shell input keyevent MENU and adb shell input keyevent BACK commands to attempt to unlock the screen

Returns:

None

Warning

Might not work on all devices

get_package_version(package)[source]

Perform adb shell dumpsys package and search for information about given package version

Parameters:

package – package name

Returns:

None if no info has been found, otherwise package version

list_app(third_only=False)[source]
Perform adb shell pm list packages to print all packages, optionally only

those whose package name contains the text in FILTER.

Options

-f: see their associated file -d: filter to only show disabled packages -e: filter to only show enabled packages -s: filter to only show system packages -3: filter to only show third party packages -i: see the installer for the packages -u: also include uninstalled packages

Parameters:

third_only – print only third party packages

Returns:

list of packages

path_app(package)[source]

Perform adb shell pm path command to print the path to the package

Parameters:

package – package name

Raises:
Returns:

path to the package

check_app(package)[source]

Perform adb shell dumpsys package command and check if package exists on the device

Parameters:

package – package name

Raises:

AirtestError – if package is not found

Returns:

True if package has been found

start_app(package, activity=None)[source]

Perform adb shell monkey commands to start the application, if activity argument is None, then adb shell am start command is used.

Parameters:
  • package – package name

  • activity – activity name

Returns:

None

start_app_timing(package, activity)[source]

Start the application and activity, and measure time

Parameters:
  • package – package name

  • activity – activity name

Returns:

app launch time

stop_app(package)[source]

Perform adb shell am force-stop command to force stop the application

Parameters:

package – package name

Returns:

None

clear_app(package)[source]

Perform adb shell pm clear command to clear all application data

Parameters:

package – package name

Returns:

None

text(content)[source]

Use adb shell input for text input

Parameters:

content – text to input

Returns:

None

Examples

>>> dev = connect_device("Android:///")
>>> dev.text("Hello World")
>>> dev.text("test123")
get_ip_address()[source]

Perform several set of commands to obtain the IP address.

  • adb shell netcfg | grep wlan0

  • adb shell ifconfig

  • adb getprop dhcp.wlan0.ipaddress

Returns:

None if no IP address has been found, otherwise return the IP address

get_gateway_address()[source]
Perform several set of commands to obtain the gateway address.
  • adb getprop dhcp.wlan0.gateway

  • adb shell netcfg | grep wlan0

Returns:

None if no gateway address has been found, otherwise return the gateway address

get_memory()[source]
get_storage()[source]
get_cpuinfo()[source]
get_cpufreq()[source]
get_cpuabi()[source]
get_gpu()[source]
get_model()[source]
get_manufacturer()[source]
get_device_info()[source]

Get android device information, including: memory/storage/display/cpu/gpu/model/manufacturer…

Returns:

Dict of info

get_display_of_all_screen(info, package=None)[source]

Perform adb shell dumpsys window windows commands to get window display of application.

Parameters:
  • info – device screen properties

  • package – package name, default to the package of top activity

Returns:

None if adb command failed to run, otherwise return device screen properties(portrait mode) eg. (offset_x, offset_y, screen_width, screen_height)

cleanup_adb_forward()[source]