『與善仁』Appium基礎 — 26、常用手機操作的API說明
- 2021 年 12 月 25 日
- 筆記
- 測試基礎必會技能 - Appium測試框架
是針對手機一些常用設置功能進行操作的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.操作步驟
發送鍵到設備: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:指定路徑下,指定格式的圖片。
業務場景:
- 打開設置介面。
- 截圖當前介面保存到當前目錄,命名為
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()