99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀阿里最強Python自動化工具開源了
阿里最強Python自動化工具開源了
2021-03-31
收藏

來源:AirPython

作者:星安果

阿里最強Python自動化工具開源了

1. 前言

大家好,我是安果!

最近,阿里內(nèi)部開源了一個 iOS 端由 Python 編寫的自動化工具,即:tidevice

它是一款跨平臺的自動化開源工具,不依賴 Xcode 就可以啟動 WebDriverAgent( WDA ),這也就意味著 Windows 可以直接運行 iOS 自動化腳本

2. 準備

進入到虛擬環(huán)境,先安裝 tidevice 的依賴包

# 安裝依賴包
pip3 install -U "tidevice[openssl]"
# 查看tidevice版本,檢查是否安裝成功
tidevice version

3. 常見功能

將 iPhone 設備連接到電腦上,就可以使用 tidevice 提供的功能了

3-1.查看設備列表

# 二選一
tidevice list
# json數(shù)據(jù)顯示
tidevice list --json

3-2.安裝、卸載應用

安裝對應的關鍵字為:「 install 

tidevice 同時支持安裝本地 ipa 包和遠鏈下的 ipa 應用包

另外,tidevice 可以使用「 --udid 」參數(shù)將應用安裝到某一臺設備中

# 安裝本地應用
tidevice install example.ipa
# 根據(jù)udid參數(shù),指定設備安裝應用
tidevice --udid $UDID install
https://example.org/example.ipa

tidevice install https://.....ipa

卸載對應的關鍵字為:「 uninstall 」

通過應用包名可以卸載設備上的某一個應用

# 卸載應用(通過包名)
# 比如:知識星球App包名為:com.unnoo.quan
tidevice uninstall com.unnoo.quan

3-3.啟動、關閉應用

啟動應用對應的關鍵字為:「 launch 」

關閉應用對應的關鍵字為:「 kill 」

# 打開應用
tidevice launch com.unnoo.quan
# 停止殺死應用
tidevice kill com.unnoo.quan

3-4.已安裝應用及名稱、版本

使用「 tidevice applist 」命令,可以查看設備上已經(jīng)安裝的應用、應用名稱、應用版本號

# 查看設備應用信息列表
localhost:tidevice_demo xingag$ tidevice applist
com.tencent.xin WeChat 8.0.2
com.ss.iphone.ugc.Aweme 抖音 13.4.0
com.tencent.mttlite QQ瀏覽器 10.8.3
com.panasonic.jp.imageapp Image App 1.10.17
com.unnoo.quan 知識星球 4.20.2
co.visualsupply.cam VSCO 189

com.ucweb.iphone.lowversion UC瀏覽器 13.1.5


com.niksoftware.snapseedforipad Snapseed 2.19.5

com.autonavi.amap 高德地圖 10.76.0
com.lagou.education 拉勾教育 1.4.9
com.xunmeng.pinduoduo 拼多多 5.37.0
com.tencent.QQMusic QQ音樂 10.5.5
io.ideamp.feelcab Feelca B 1.6.0

com.chinaunicom.mobilebusiness 手機營業(yè)廳 8.00.01

com.feiyu-tech.vico Vicool 1.2.26

com.ss.iphone.article.News 今日頭條 7.9.3

com.sogou.sogouinput 搜狗輸入法 10.18.1
org.geekbang.GeekTime 極客時間 2.9.2
com.burbn.hyperlapse Hyperlapse 1.3.4
com.apple.itunesu iTunes U 3.8

3-5.設備信息

利用「 tidevice info 」可以查看設備信息,比如:設備序列號、系統(tǒng)版本、CPU、本機號碼、時間戳、藍牙地址、MAC 地址等信息

# 查看設備信息
localhost:~ xingag$ tidevice info
MarketName: iPhone SE (1st generation)
DeviceName: xingag
ProductVersion: 14.4
ProductType: iPhone8,4
ModelNumber: MP892
SerialNumber: ...
CPUArchitecture: arm64
ProductName: iPhone OS
ProtocolVersion: 2
RegionInfo: ZP/A
TimeIntervalSince1970: 1616979424.235399
TimeZone: Asia/Shanghai
WiFiAddress: 58:e2:8f:68:4c:b0
BluetoothAddress: 58:e2:8f:68:4c:b1
BasebandVersion: 10.40.01
...

如果要查看設備的電池信息,可以使用關鍵字 「 --domain + 應用包名 」來獲取

# 查看設備電池信息
localhost:~ xingag$ tidevice info --domain com.apple.mobile.battery --json
{
"BatteryCurrentCapacity": 54,
"BatteryIsCharging": true,
"ExternalChargeCapable": true,
"ExternalConnected": true,
"FullyCharged": false,
"GasGaugeCapability": true,
"HasBattery": true
}

3-6.重啟及截圖

重啟對應的關鍵字為:「 reboot 」

截圖對應的關鍵字為:「 screenshot 」

# 重啟設備
tidevice reboot
# 截圖并保存到文件 screenshot.jpg 中
tidevice screenshot screenshot.jpg

3-7.系統(tǒng)日志及更多幫助

查看系統(tǒng)日志的命令為:「 tidevice syslog 」,當然也可以配置 grep 參數(shù)進行過濾

# 查看系統(tǒng)日志
tidevice syslog
# 更多幫助
tidevice -h

4. 自動化步驟

要完成 iOS 端的自動化,我們還需要做一些準備工作

4-1.安裝 WDA

我們需要將 WebDriverAgent 安裝到 iOS 設備上,通過它驅動手機進行一系列自動化操作

PS:由于 Facebook WDA 很長時間沒有更新了,這里建議直接使用 Appium WDA

https://github.com/appium/WebDriverAgent

下載項目后,使用 Xcode 打開,Scheme 選擇 WebDriverAgentRunner,設備選擇真機

然后配置開發(fā)者證書,可以參考下面鏈接進行配置

https://testerhome.com/topics/7220

最后,Xcode 選擇 Project 下的 Test 將項目運行到真機設備上

注意:第一次運行 WDA 可能運行失敗,需要手動在設置中對證書添加信任

4-2.運行 WDA

真機設備安裝完 WDA 后,就可以脫離 Mac,使用 Windows 進行自動化操作了

使用「 tidevice wdaproxy 」命令可以運行 WDA 和端口轉發(fā)

# 運行 WDA
# 端口轉發(fā)到8100
# 應用包名:
com.facebook.WebDriverAgentRunner.xingag23.xctrunner

idevice wdaproxy -B
com.facebook.WebDriverAgentRunner.xingag23.xctrunner --port 8100

PS:由于 Xcode 設置證書的時候,更改過 bundle_id,所以這里的包名是一個變量

4-3.編寫自動化腳本

接下來,就可以使用 Appium 或 facebook-wda 編寫腳本并運行到 iOS 設備上了

以 facebook-wda 為例

首先,我們安裝對應的依賴

# 安裝facebook-wda依賴
pip3 install -U facebook-wda

接著,編寫自動化腳本并運行測試

import wda
import time
# 連接設備
c1 = wda.USBClient()
# c1 = wda.Client("http://10.3.209.175:8100")
print(c.info)
# 極客時間
bundle_id = 'org.geekbang.GeekTime'
# 通過app的bundleId啟動App
s = c1.session(bundle_id)
# 休眠5s
s.sleep(5)
# 截圖保存到本地
c1.screenshot('sc.png')
# 回到桌面
s.home()

5. 最后

阿里這款 iOS 端自動化工具的主要優(yōu)點是啟動速度快,內(nèi)存占用低;更重要的是,它是跨平臺,穩(wěn)定性相對較高

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調,回調的第一個參數(shù)驗證碼對象,之后可以使用它調用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }