『與善仁』Appium基礎 — 16、APPium基礎操作API


1、前置代碼

一個腳本中必須要編寫的內容,寫在前置代碼中:

# server 啟動參數
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1'
desired_caps['deviceName'] = '192.168.56.101:5555'
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = '.Settings'

# 聲明driver對象
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

2、安裝和卸載APP

(1)把電腦中的APK安裝包,安裝到手機上。

安裝方法:

driver.install_app(app_path)

參數:
  app_path:腳本機器中APK文件路徑

(2)卸載手機上已安裝的APP。

卸載方法:

driver.remove_app(app_id)

參數:
  app_id:需要卸載的app包名

(3)演示練習

# 1.導入appium
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.microvirt.launcher2",  # APP包名
    "appActivity": "com.microvirt.launcher.Launcher"  # APP啟動名
}

# 3.啟動APP
# 聲明手機驅動對象(實例化webdriver)
# 第一個參數為appium服務的地址,需要啟動appium服務。
# 第二個參數為Desired capabilities對象
# 我們就先傳入這兩個參數就可以了。
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)


# 4.操作APP
# 腳本機器中APK文件路徑,注意前邊要加一個r,不然解析地址時可能會報錯。
app_path = r'C:\Users\L\Desktop\com.taobao.taobao_V9.15.0.apk'
# 安裝apk
driver.install_app(app_path)
time.sleep(5)

# 要知道即將卸載的app的包名
app_id = "com.taobao.taobao"
# 卸載APP
driver.remove_app(app_id)

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

說明:

  • 一般這兩個命令很少使用,即使用命令安裝apk軟件,一般我們也推薦使用adb命令。就不用把安裝APP的代碼寫入腳本中,即使寫入腳本,最終執行也是adb命令。如果公司的測試機充裕,我們就把APP的安裝包放入手機,直接手動安裝了。

  • 一般用到這兩個命令是在一個腳本要去測試多個APP的時候,會用到這兩個命令,在測試時把這幾個APP先安裝上,測試完成之后在卸載APP。但是這種情況也基本上不多,一般情況APP都單獨測試。

3、判斷APP是否已安裝

使用的API:

driver.is_app_installed(bundle_id)

參數:
  bundle_id: 傳⼊app包名,返回結果為True(已安裝) / False(未安裝)

示例:

# 1.導入appium
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.microvirt.launcher2",  # APP包名
    "appActivity": "com.microvirt.launcher.Launcher"  # APP啟動名
}

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


# 4.操作APP
# 腳本機器中APK⽂件路徑
app_path = r'C:\Users\L\Desktop\com.taobao.taobao_V9.15.0.apk'
# 安裝apk
driver.install_app(app_path)
time.sleep(5)

# 要知道即將卸載的APP的包名
bundle_id = "com.taobao.taobao"
result = driver.is_app_installed(bundle_id)
# 結果是result=true
print(result)

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

提示:一般我們用眼看APP是否安裝就可以了,腳本中明確需要的時候再寫。

4、關閉APP軟件和關閉驅動對象

關閉APP軟件和關閉驅動對象的區別:

  • driver.close_app()

    閉當前操作的APP,不會關閉驅動對象。

  • driver.quit()

    關閉驅動對象,同時關閉所有關聯的APP。

5、發送文件到手機和獲取手機中的文件

(1)發送文件到手機

代碼片段:

# 導入base64庫
import base64

# 將文件轉換成二進制文件
with open(file_path,'rb') as fp:
    data = str(base64.b64encode(fp.read()),'utf-8')
	# print(data)

# 將轉換格式的文件發送到手機
driver.push_file(path, data)

參數說明:

  • file_path:需要上傳的文件路徑。
  • path:手機設備上的路徑(例如:/sdcard/a.txt)
  • data:文件內數據,要求base64編碼。

說明:

Python3.x中字符都為unicode編碼,需要先導入base64庫進行編碼和解碼,先把文件轉成base64格式的二進制文件,然后進行文件傳遞到手機,因為設備之間傳遞是二進制的。

(2)從手機中拉取文件

代碼片段:

import base64

# 返回數據為base64編碼的數據
data = driver.pull_file(path) 

# base64解碼
with open('a.txt','wb') as fp:
	fp.write(base64.b64decode(data)) 

參數:

path:手機設備上的路徑例如: /sdcard/a.txt

(3)示例:

# 1.導入appium
import time
from appium import webdriver
import base64

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

# 3.啟動APP
# 聲明手機驅動對象(實例化webdriver)
# 第一個參數為appium服務的地址,需要啟動appium服務。
# 第二個參數為Desired capabilities對象
# 我們就先傳入這兩個參數就可以了。
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)

# 4.操作APP

# 4.1 發送文件到手機
file_path = r'C:\Users\L\Desktop\test.txt'

# 將文件轉換成二進制文件
with open(file_path, 'rb') as fp:
    data = str(base64.b64encode(fp.read()), 'utf-8')
    # print(data)

# 將轉換格式的文件發送到手機
path = r'/sdcard/test.txt'
driver.push_file(path, data)

# 4.2 從手機中拉取文件到電腦上
# 手機中文件的路徑
path_app = '/sdcard/test.txt'
# 返回數據為base64編碼的數據
data = driver.pull_file(path_app)

print(data)

# base64解碼
with open('test.txt', 'wb') as fp:
    fp.write(base64.b64decode(data))

# 提示:該文件會拉取到腳本文件所在的目錄中

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

6、獲取當前屏幕內元素結構(重點)

(也就是獲取當前屏幕的源碼)

使用的API:

driver.page_source

作用:
  返回當前頁面的文檔結構,可以為后續判斷特定的元素是否存在提供前提。

示例:

# 1.導入appium
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("http://127.0.0.1:4723/wd/hub", desired_caps)

# 4.操作APP
# 獲取當前頁面源碼
# 只是設置首頁中的頁面源碼
source = driver.page_source
# # print(source)

# 將APP的頁面源碼保存到一個文件中
with open("source.txt", "w", encoding="UTF-8") as fp:
    fp.write(source)

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

7、腳本內啟動其他APP

使用的API:

driver.start_activity(appPackage,appActivity)

# 提示:appPackage,appActivity為所要啟動APP的包名和啟動名

示例:

# 從管理app頁面中打開文件管理器app

# 1.導入appium
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("http://127.0.0.1:4723/wd/hub", desired_caps)

# 4.操作APP
# 從設置APP頁面啟動文件管理器APP
time.sleep(3)

# 先用adb命令獲取文件管理器的包名和啟動名
# com.cyanogenmod.filemanager/.activities.NavigationActivity
driver.start_activity("com.cyanogenmod.filemanager", ".activities.NavigationActivity")

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

8、將應用程序置於后台運行(重點)

使用的API:

# 將應用置於后台運行(秒)
driver.background_app()

示例:

# 1.導入appium
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("http://127.0.0.1:4723/wd/hub", desired_caps)

# 4.操作APP
time.sleep(3)
# 將設置APP置於后台運行
# 將應用在后台運行5秒,返回前台
driver.background_app(5)

# 提示:測試前最好把設備中所有后台運行的APP都關閉掉。

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

提示:在測試APP熱啟動的時候,就會常用到該命令。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM