『與善仁』Appium基礎 — 26、常用手機操作的API說明

是針對手機一些常用設置功能進行操作的API。

這些API都非常的簡單,用的時候直接查詢調用就可以了,下面介紹幾個非常常用的API。

1、獲取當前手機的時間

使用方法:device_time

# 調用方式:
driver.device_time

# 輸出結果:
2020-12-04T00:02:50+08:00

2、獲取手機螢幕的寬和高

獲取手機的寬高,可以根據寬高做一些坐標的操作。

使用方法:get_window_size()

# 調用方式:
driver.get_window_size()

# 輸出結果:
{'width': 720, 'height': 1280}

3、獲取手機當前網路

獲取手機當前連接的網路資訊。

使用方法:network_connection

# 調用方式
driver.network_connection

# 輸出結果:數字代表網路模式
6

4、設置手機網路模式

更改手機的網路模式。

使用方法:set_network_connection(connectionType)

# 調用方式
driver.set_network_connection(connectionType)


# 參數:connectionType

# 需要被設置成為的網路類型
"""Sets the network connection type. Android only.
    設置網路連接類型。 僅適用於Android。
Possible values:

    +--------------------+------+------+---------------+
    | Value (Alias)      | Data | Wifi | Airplane Mode |
    +====================+======+======+===============+
    | 0 (None)           | 0    | 0    | 0             |
    +--------------------+------+------+---------------+
    | 1 (Airplane Mode)  | 0    | 0    | 1             |
    +--------------------+------+------+---------------+
    | 2 (Wifi only)      | 0    | 1    | 0             |
    +--------------------+------+------+---------------+
    | 4 (Data only)      | 1    | 0    | 0             |
    +--------------------+------+------+---------------+
    | 6 (All network on) | 1    | 1    | 0             |
    +--------------------+------+------+---------------+

These are available through the enumeration `appium.webdriver.ConnectionType`
這些可以通過枚舉「 appium.webdriver.ConnectionType」獲得。
Args:
    connection_type: a member of the enum `appium.webdriver.ConnectionType`

Return:
    int: Set network connection type   
返回值是int類型:設置網路連接類型
"""

None:沒有選擇模式
Airplane Mode:飛行模式
Wifi only:僅Wifi
Data only:僅數據
All network on:所有網路均已開啟

5、操作手機通知欄

打開手機的通知欄,可以獲取通知欄的相關資訊和元素操作。

使用方法:open_notifications()

# 調用方式
driver.open_notifications()

6、綜合練習

"""
1.學習目標
    掌握手機操作中的常用API
2.操作步驟
    2.1 獲取當前手機的時間
    2.2 獲取手機螢幕的寬和高
    2.3 獲取手機當前網路
    2.4 設置手機網路模式
    2.5 打開手機系統通知欄
3.需求
    實現以上功能
"""

# 1.導入appium和TouchAction
import time
from appium import webdriver

# 2.創建Desired capabilities對象,添加啟動參數
desired_caps = {
    "platformName": "Android",  # 系統名稱
    "platformVersion": "7.1.2",  # 系統版本
    "deviceName": "127.0.0.1:21503",  # 設備名稱
    "appPackage": "com.android.settings",  # APP包名
    "appActivity": ".Settings"  # APP啟動名
}

# 3.啟動APP
driver = webdriver.Remote("//127.0.0.1:4723/wd/hub", desired_caps)

# 4.操作APP
# 4.1 獲取當前手機的時間
date = driver.device_time
# 輸出結果:2020-12-04T00:00:22+08:00
print(date)

# 4.2 獲取手機螢幕的寬和高
size = driver.get_window_size()
# 輸出結果:{'width': 720, 'height': 1280}
print(size)

# 4.3 獲取手機當前網路
network = driver.network_connection
# 輸出結果:6
print(network)

# 4.4 設置手機網路模式
# 開啟飛行模式,
# driver.set_network_connection(1)
# 或者使用枚舉類也行
# 引入from appium.webdriver.connectiontype import ConnectionType包
# driver.set_network_connection(ConnectionType.AIRPLANE_MODE)
# 列印手機當前網路模式
# print(driver.network_connection)

# 注意:切換網路模式操作會導致電腦與模擬器的鏈接斷開。


# 4.5 打開手機系統通知欄
driver.open_notifications()

# 5.關閉APP
time.sleep(3)
driver.quit()

7、發送鍵到設備(掌握)

模擬系統鍵值的操作,比如操作home鍵,音量鍵,返回鍵等。

使用方法:keyevent(keycode, metastate=None):

# 調用方式
driver.keyevent(keycode)

參數:
    keycode:發送給設備的關鍵程式碼。
    metastate:關於被發送的關鍵程式碼的元資訊,一般為默認值。

說明:Android常用keycode鍵列表如下:

鍵名 描述 鍵值
KEYCODE_CALL 撥號鍵 5
KEYCODE_ENDCALL 掛機鍵 6
KEYCODE_HOME 按鍵Home 3
KEYCODE_MENU 菜單鍵 82
KEYCODE_BACK 返回鍵 4
KEYCODE_SEARCH 搜索鍵 84
KEYCODE_CAMERA 拍照鍵 27
KEYCODE_FOCUS 拍照對焦鍵 80
KEYCODE_POWER 電源鍵 26
KEYCODE_NOTIFICATION 通知鍵 83
KEYCODE_MUTE 話筒靜音鍵 91
KEYCODE_VOLUME_MUTE 揚聲器靜音鍵 164
KEYCODE_VOLUME_UP 音量增加鍵 24
KEYCODE_VOLUME_DOWN 音量減小鍵 25
KEYCODE_ENTER 回車鍵 66
KEYCODE_ESCAPE ESC鍵 111
KEYCODE_DPAD_CENTER 導航鍵_確定鍵 23
KEYCODE_DPAD_UP 導航鍵_向上 19
KEYCODE_DPAD_DOWN 導航鍵_向下 20
KEYCODE_DPAD_LEFT 導航鍵_向左 21
KEYCODE_DPAD_RIGHT 導航鍵_向右 22
KEYCODE_MOVE_HOME 游標移動到開始鍵 122
KEYCODE_MOVE_END 游標移動到末尾鍵 123
KEYCODE_PAGE_UP 向上翻頁 92
KEYCODE_PAGE_DOWN 向下翻頁 93
KEYCODE_DEL 退格鍵 67
KEYCODE_FORWARD_DEL 刪除鍵 112
KEYCODE_INSERT 插入建 124
KEYCODE_TAB Tab鍵 61
KEYCODE_NUM_LOCK 小鍵盤鎖 143
KEYCODE_CAPS_LOCK 大寫鎖定鍵 115
KEYCODE_BREAK 暫停鍵 121
KEYCODE_SCROLL_LOCK 滾動鎖定鍵 116
KEYCODE_ZOOM_IN 放大鍵 168
KEYCODE_ZOOM_OUT 縮小鍵 169

業務場景:

  1. 打開設置。
  2. 按多次音量增加鍵。

程式碼實現:

"""
1.學習目標
    掌握髮送鍵到設備
2.操作步驟
    發送鍵到設備:driver.keyevent(keycode)
        例如:
        音量增大 keycode = 24
        音量減小 keycode = 25
3.需求
    使用keyevent控制手機音量大小
"""

# 1.導入appium和TouchAction
import time
from appium import webdriver

# 2.創建Desired capabilities對象,添加啟動參數
desired_caps = {
    "platformName": "Android",  # 系統名稱
    "platformVersion": "7.1.2",  # 系統版本
    "deviceName": "127.0.0.1:21503",  # 設備名稱
    "appPackage": "com.android.settings",  # APP包名
    "appActivity": ".Settings"  # APP啟動名
}

# 3.啟動APP
driver = webdriver.Remote("//127.0.0.1:4723/wd/hub", desired_caps)

# 4.操作APP
# 4.1 發送鍵到設備,實現手機音量調節
# 音量增大
for i in range(4):
    driver.keyevent(24)
    time.sleep(1)

# 音量減小
for i in range(2):
    driver.keyevent(25)
    time.sleep(1)

# 5.關閉APP
time.sleep(3)
driver.quit()

8、手機截圖(掌握)

截取手機當前螢幕,保存指定格式圖片到設定位置。

使用方法:get_screenshot_as_file(filename)

# 調用方式
driver.get_screenshot_as_file(filename)

參數:
	filename:指定路徑下,指定格式的圖片。

業務場景:

  1. 打開設置介面。
  2. 截圖當前介面保存到當前目錄,命名為screen.png

程式碼實現:

"""
1.學習目標
    掌握appium中手機截圖
2.操作步驟
    手機截圖
        driver.get_screenshot_as_file(存儲文件的路徑+文件名)
        圖片格式僅支援png格式。
3.需求
    實現手機截圖功能
"""

# 1.導入appium和TouchAction
import time
from appium import webdriver

# 2.創建Desired capabilities對象,添加啟動參數
desired_caps = {
    "platformName": "Android",  # 系統名稱
    "platformVersion": "7.1.2",  # 系統版本
    "deviceName": "127.0.0.1:21503",  # 設備名稱
    "appPackage": "com.android.settings",  # APP包名
    "appActivity": ".Settings"  # APP啟動名
}

# 3.啟動APP
driver = webdriver.Remote("//127.0.0.1:4723/wd/hub", desired_caps)

# 4.操作APP
# 手機截圖,截圖保存當前目錄(腳本文件所在的同級目錄)
# driver.get_screenshot_as_file("test.jpg") # 寫jpg格式日誌中會有警告
driver.get_screenshot_as_file("test1.png")

# 5.關閉APP
time.sleep(3)
driver.quit()