Airtest1.3.0.1新增iOS設備相關接口解析

Airtest1.3.0.1更新了一些iOS設備相關的接口,下面就讓我們看看以後有哪些新功能可以直接用了。

1.install

之前的install()只支持Android裝包,以後也同樣支持iOS啦

from airtest.core.api import *

# 支持ipa包安裝
install(r"D:\demo\qasite.ipa") 
# 也支持通過下載鏈接安裝APP
install("http://www.example.com/test.ipa") 

運行後會輸出:

Copying '/Users/szh/Downloads/qasite.ipa' to device... [20.4 MB/s 12s] DONE.
Installing 'com.qasite.wechat' '1.1.0'
- CreatingStagingDirectory (5%)
- ExtractingPackage (15%)
- InspectingPackage (20%)
- TakingInstallLock (20%)
- PreflightingApplication (30%)
- InstallingEmbeddedProfile (30%)
- VerifyingApplication (40%)
- CreatingContainer (50%)
- InstallingApplication (60%)
- PostflightingApplication (70%)
- SandboxingApplication (80%)
- GeneratingApplicationMap (90%)
Complete

2.uninstall

之前的uninstall()只支持Android,以後也同樣支持iOS啦

from airtest.core.api import *

# 參數爲Bundle ID即iOS包的包名
uninstall("com.qasite.wechat") 

運行後會輸出:

Uninstalling 'com.qasite.wechat'
- RemovingApplication (50%)
- GeneratingApplicationMap (90%)
Complete

3.list_app

列出設備已安裝應用信息

from airtest.core.api import *
dev = device()

all_app = dev.list_app("all")
print(f"all_app:\n{all_app}")

print(f"system_app:\n{dev.list_app('system')}")

user_app = dev.list_app("user")
print(f"user_app:\n{user_app}")

運行後會報錯

Traceback (most recent call last):
  File "/Users/szh/opt/miniconda3/envs/test/lib/python3.8/site-packages/airtest/cli/runner.py", line 75, in runTest
    six.reraise(*sys.exc_info())
  File "/Users/szh/opt/miniconda3/envs/test/lib/python3.8/site-packages/six.py", line 719, in reraise
    raise value
  File "/Users/szh/opt/miniconda3/envs/test/lib/python3.8/site-packages/airtest/cli/runner.py", line 72, in runTest
    exec(compile(code.encode("utf-8"), pyfilepath, 'exec'), self.scope)
  File "/Users/szh/auto_test/suite_test/suite_test.py", line 26, in <module>
    all_app = dev.list_app()
  File "/Users/szh/opt/miniconda3/envs/test/lib/python3.8/site-packages/airtest/core/ios/ios.py", line 47, in wrapper
    return func(self, *args, **kwargs)
  File "/Users/szh/opt/miniconda3/envs/test/lib/python3.8/site-packages/airtest/core/ios/ios.py", line 850, in list_app
    return TIDevice.list_app(self.udid, type=type)
  File "/Users/szh/opt/miniconda3/envs/test/lib/python3.8/site-packages/airtest/core/ios/ios.py", line 67, in wrapper
    return func(*args, **kwargs)
TypeError: list_app() got an unexpected keyword argument 'type'

這是因爲Airtest1.3.0.1有個Bug,如果你現在的版本是高於此版本的,那相信網易已經修改了。
我們看/your_python_path/site-packages/airtest/core/ios/ios.py中,第850行,寫的是TIDevice.list_app(self.udid, type=type);但110行卻是def list_app(udid, app_type="user"),參數名寫的不一致,一個是app_type,一個是type,統一一下就行了,比如將850行的type改爲app_type。

之後再次運行後會輸出:

[('com.apple.Home', '家庭', '6.0'), ('com.apple.shortcuts', '快捷指令', '5.0'), ('com.google.chrome.ios', 'Chrome', '115.5790.130')]

[('com.apple.Home', '家庭', '6.0'), ('com.apple.CTCarrierSpaceAuth', 'CTCarrierSpaceAuth', '1.0'), ('com.apple.shortcuts', '快捷指令', '5.0'),]

[('com.ownbook.notes', '愛思全能版', '2.2.0'), ('com.google.chrome.ios', 'Chrome', '115.5790.130')]

4.iOS剪切板功能:get_clipboard、set_clipboard

from airtest.core.api import *

set_clipboard("qasite")
text = get_clipboard()
print(f'剪貼板內容:{text}')

運行後會輸出:qasite

主要可以用到:

  • 點擊一鍵複製XXX後,以後可以獲取剪切板與文本進行比對了;

  • 輸入複製內容:先設置剪切板,再在app上長按,選粘貼

5.tidevice相關接口

其實就是封裝了tidevice的命令,常用接口如下:

  • devices :列出USB連接的所有設備的 UDID 列表

from airtest.core.ios.ios import TIDevice

udid = TIDevice.devices()
print(f"TIDevice.devices():\n{udid}")

輸出

['f83a2d08deb8c22ce6338e35328f5cfcaaf5d3f4']

如果是要查看當前連接的iOS設備,直接這樣獲取即可:print(dev.udid)

  • list_app :列出手機上安裝的應用列表,支持對類型進行篩選,包括 user/system/all
    上面Airtest接口中已有,用那個就行了

  • list_wda :列出手機上安裝的所有WDA的 bundleID
    一般我們也不會同時裝好多個wda吧,基本不用

  • device_info :獲取手機信息

print(f"TIDevice.device_info():\n{TIDevice.device_info(udid)}")
#  輸出
{'productVersion': '15.7.3', 'productType': 'iPhone9,2', 'modelNumber': 'MNRL2', 'serialNumber': 'F2LSGNHG52', 'timeZone': 'Asia/Shanghai', 'uniqueDeviceID': 'f83a2d08deb8caaf5d3f4', 'marketName': 'iPhone 7 Plus'}
  • install_app :安裝ipa包,支持本地路徑或URL
    上面Airtest接口中已有,用那個就行了

  • uninstall_app:卸載 bundle_id 對應的包體
    上面Airtest接口中已有,用那個就行了

  • start_app :啓動 bundle_id 對應的包體
    原有Airtest接口中已有,用那個就行了

  • stop_app :停止 bundle_id 對應的包體
    原有Airtest接口中已有,用那個就行了

  • ps :獲取當前的進程列表
    想獲取app包名時,也可以用此方法

print(f"TIDevice.ps():\n{TIDevice.ps(udid)}")
# 輸出
[{'pid': 4848, 'name': 'StoreKitUIService', 'bundle_id': 'com.apple.ios.StoreKitUIService', 'display_name': 'iTunes'}, {'pid': 217, 'name': 'Spotlight', 'bundle_id': 'com.apple.Spotlight', 'display_name': '搜索'}, {'pid': 5176, 'name': 'TestFlight', 'bundle_id': 'com.apple.TestFlight', 'display_name': 'TestFlight'}, {'pid': 7699, 'name': 'AppStore', 'bundle_id': 'com.apple.AppStore', 'display_name': 'App Store'}, {'pid': 5050, 'name': 'SafariViewService', 'bundle_id': 'com.apple.SafariViewService', 'display_name': 'Safari瀏覽器'}, {'pid': 6800, 'name': 'Preferences', 'bundle_id': 'com.apple.Preferences', 'display_name': '設置'}]
  • ps_wda :獲取當前啓動中的WDA列表
    暫時沒想到使用場景

  • xctest:啓動WDA

import threading
import time
from airtest.core.ios.ios import TIDevice

wda_bundle_id = TIDevice.list_wda(self.udid)[0]
# 創建一個線程,執行xctest
t = threading.Thread(target=TIDevice.xctest, args=(self.udid, wda_bundle_id), daemon=True)
t.start()
time.sleep(5)
ps_wda = TIDevice.ps_wda(self.udid)
print(ps_wda)
self.assertIn(wda_bundle_id, ps_wda)
time.sleep(5)
# 終止線程
t.join(timeout=3)

 

---------------------------------------------------------------------------------

關注微信公衆號即可在手機上查閱,並可接收更多測試分享~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章