首頁
資質證書(shū)
新聞中心
公司簡介
聯系我們
搜索
位置 首頁>新聞中心>行(xíng)業(yè)快(kuài)訊
行(xíng)業(yè)快(kuài)訊

多(duō)設備兼容腳本,輕松拿(ná)捏

發布時(shí)間(jiān):2024-06-20| 作(zuò)者:山(shān)西(xī)雲絡| 浏覽次數(shù):{{num}}

一(yī)、前言

有(yǒu)比較多(duō)同學有(yǒu)提到(dào)說(shuō)能(•±σαnéng)否一(yī)個(gè)腳本同時(shí)适用(yòng)于 An→ ₩droid 跟 iOS 設備,也(yě)★™有(yǒu)同學問(wèn)是(shì)否可(kě)以根據不(bù)‍¥₹同的(de) Android 廠(chǎng)商∏ γ≥設備,去(qù)執行(xíng)不(bù)同的(de)₽€操作(zuò),那(nà)麽本周,我們一(yī)¥α 起探討(tǎo)一(yī)下(xià)這(zhè)個(↓εgè)問(wèn)題,如(rú)何讓一(♣$§£yī)個(gè)腳本兼容更多(duō)的(de)機(jī)型~

二、如(rú)何查詢所連接的(de)設備信息

2.1 簡單分(fēn)辨 iOS 設備與 Andro¥<α✘id 設備

我們在連接完設備後,可(kě)以通(tōng)'♠過下(xià)方的(de)語句查詢到(dào)我們所連接設備時(s¥Ωhí)使用(yòng)的(de)類是(sh<φì)什(shén)麽,并将該類的(de)名稱返回。

 device().__class__.__name__.lowδ∑σ≈er() 

在 Airtest 中,Android 設備以及 iOS 設±×備所使用(yòng)的(de)類不(bù)同,并以系統名作(zuò)為(w↑♦èi)類名稱,所以我們可(kě)以直接通(tōng)$≤過類的(de)名稱将其區(qū)分(fēn)開(kāi)來(lái≤&‌)。

2.2 分(fēn)辨不(bù)同的(de) Android 設備廠(chǎn↕<★g)商以及設備型号

Android 設備廠(chǎng)商比較多&¥↓(duō),我們可(kě)以通(tōng)過下(xià)方的(de) adb  ∑‍ 命令查詢的(de)方式去(qù)獲取我們所連接的(de)設備的(de)相(↑"↓↑xiàng)關信息,我們在控制(zhì)台輸入adb♦♣≈ shell,進入 linux 命令行(xín>↕g),再輸入下(xià)方命令,可(kě)以看(kàn)到✔&→(dào)有(yǒu)我們所需要(yào)的(de)設備信₩$¥息。

 adb shell getprop | grep ₽‌™product 但(dàn)是(shì)我們可(kě​←)以根據自(zì)己的(de)需求去(qù)進行(¶‌Ωxíng)篩選,如(rú)我們這(zhè)裡(lǐ)★'↑使用(yòng)到(dào)的(de)設備品牌以及設備$♣÷±型号,分(fēn)别可(kě)以通(tōng)過下(♣πxià)方的(de)方式獲取
 # 獲取設備品牌名adb shell getpropβ→ ro.product.brand# 獲取設備型号a©αφ•db shell getprop ro.p±₽π roduct.model 在代碼中,我們使用(yòng) py‍♥thon3 的(de)子(zǐ)進程模塊 subproce↕♥ss 的(de) subprocess.ch₹♣Ωπeck_output([],text=Tru÷"e) 方法去(qù)執行(xíng) adb 命令,其中 text=True±↔ 參數(shù)表示返回的(de)輸出結果是(shì)一(y₽  ī)個(gè)字符串,可(kě)以直接使用(yòng)
 # 獲取設備品牌brand = subprocess✔≥.check_output(['adb', 'shelγ<l', 'getprop', 'ro.prod'&↑γuct.brand'], text=True).strip→§φ() # 獲取設備型号mode★₩l = subprocess.check_output≠δ★(['adb', 'shell', 'get∑ © prop', 'ro.product.model'], ®φtext=True).strip()  

三、分(fēn)辨 iOS 設備與 Android 設備案例

 # -*- encoding=utf8 -÷↑*-__author__ = "Airtest"from ↕↕ •airtest.core.api import £ *auto_setup(__file__)# 定義And→≈"roid操作(zuò)函數(shù)def&nφ₹δbsp;android_operate():&nb★₩'¥sp;   staφ ♦☆rt_app("com.miui.player")&nb₹∑λ"sp; # 打開(kāi)小(xiǎo)米音(yīn)樂 ‌✘(yuè)APP    sleep(​≤←λ3.0)    β wait(Template(r"tpl171738381¶&‌9774.png", record_pos=(-0.196, -♠♥±™0.251), resolution=(1080♥φ™, 2400)))  &nb±§★sp; touch(Template(r"tpl1♠&∏σ717383706465.png", record_pos=(-0.19♥↕™4, -0.242), resolution=(1080, β₩2400)))   ≈×Ω; sleep(3.0)  &✔δnbsp; print("已打開(kāi)小(xiǎo)米‌↔的(de)音(yīn)樂(yuè)APP了(le)")# ε↕定義iOS操作(zuò)函數(shù)de•₽ &f ios_operate():  &&€♦γnbsp;  &nb‌​±sp;  from poco.drivers✔♦‌₹.ios import iosP•‌oco   &nbs•™↔p;poco = iosPoco()   &nα₹≥bsp;    poco("播客").∞λclick()  # 點擊播客 &n  ™δbsp;  sleep(1.0> )    poco("✘αε女(nǚ)性暢聊健康生(shēng)活方式 輕松溫暖治愈$<α×日(rì)常煩惱").click() & €π∑nbsp;# 點擊女(nǚ)性暢聊健康生(shēng)活方式&nbsβ×✔£p;   sוleep(1.0)  ±< ≠  print("已打開(kāi)iphone的(de)播‌>γ客APP了(le)")if __name__ == "_↕↔♦Ω_main__":   <&★; # 獲取連接的(de)設備信息&nbs∞™p;   platfoβ&π£rm = device().__class__.__ε£name__.lower()    ε✔↓; if platfσπ♣<orm == "android":  &≤δ♣±nbsp;   ↓   print("當前設備是(shì)¶•Android")  # 輸出當前設備是(shì)A ₹ndroid    &☆$₩¶nbsp;   §¥✔;sleep(3.0)   &γ¶‌nbsp;  &nb≠>₽★sp; android_operα¥ ate()   αφδ; elif platform ==&n ​®bsp;"ios":   &£↑¥nbsp;   &n$©✔γbsp;print("當前設備是(shì)iOS")  ¶♥λ # 輸出當前設備是(shì)iOS   &nbs←€←>p;    sleep(3.0)&n♦±≤®bsp;  &nbs≥★•≥p;    ₽'ios_operate()   &​→nbsp;else:   &•γ≥nbsp;    print("當$≠≤↓前設備是(shì)未知(zhī)設備")  # 輸×₽↑£出當前設備是(shì)未知(zhī)設備 

四、Android 設備分(fēn)辨不(bù)同'♣廠(chǎng)商型号案例

 # -*- encoding=utf8 →↑↓ε-*-__author__ = "Airtest"from&nb€'sp;airtest.core.api import *a≠σ​uto_setup(__file__)import subproc§α±essdef get_andr₽↕oid_device_info():   &λβλ♥nbsp;try:  ≤​§;   & $∞←nbsp;  # 使用(yòng) aαΩdb shell getprop 獲取設備品牌和(hé)型号信息 σ©♠↑;   &n≥ λbsp;   braδ♠♦•nd = subprocess.check_out<×"put(['adb', 'shell' ♦±σ, 'getprop', ≥☆βσ'ro.product.brand'],♣→Ω¥ text=True).strip() # 獲取設備品牌 ♦>    &nb♥÷£∞sp;  model = subpr♥↔ocess.check_output(['adb',&nβ§✘♣bsp;'shell', 'getpr ↕op', 'ro.product.model'], te∑®γ¶xt=True).strip()&nbs₽&"p;# 獲取設備型号  &nb•$sp;    &n♥÷bsp;return brand, model&nbs¥♣>p;   except&n"σbsp;Exception as e: §β♥‌;    &n•Ωγbsp;  # 捕獲異常&Ωε♥nbsp;    &nβ≥bsp;  print(f"An error occ♠ λurred: {e}")  &n€★bsp;    &n≥® φbsp;return None, Non¥‌λπedef open_vivo_music(): &n§ bsp;  start_app∑∏("com.android.bbkmusic") # 打開(kāi)‍≠≤Vivo音(yīn)樂(yuè)APP   &n♣★bsp;sleep(3.0)    <>∏wait(Template(r"tpl1717383100103. ©png", record_pos=(-0.376,  ®-0.051), resolution=(720,♠γ♦™ 1440)))   &nbs≤≠βγp;touch(Template(r"tpl1717383106988.pn₽>g", record_pos=(-0.375, -0.044)≤∑, resolution=(720, 1440))) &n✘εδbsp;  sleep(3.♦>•0)    print("已打開€✘ (kāi)Vivo的(de)i音(yīn)樂(yuè)Aλ♦•PP了(le)")def open_₽☆$‌xiaomi_music():   γ¶≤ start_app("com.↕§φmiui.player") # 打開(kāi)小(xiǎo)米音(y♥δīn)樂(yuè)APP   ♣¥↕• sleep(3.0)  ✔♦  wait(Template(r"t ¥₽>pl1717383819774.png", record_pos=(-0.19÷×∑<6, -0.251), resolution=(1↓β>↓080, 2400)))   ≠₹σ; touch(Template(r"¥♥" tpl1717383706465.png",↑βδ↔ record_pos=(-0.194, -0.242), reso¶​®φlution=(1080, 2400)))  &≤ ≠∞nbsp; sleep(3.0)♣™ε‍    print(™♣&"已打開(kāi)小(xiǎo)米的(de)音(yīn)樂(yuè'♠)APP了(le)")def open_huawei_mu∑☆sic():   &n ☆✘bsp;start_app("com.android.mediacente↑≤≈r") # 打開(kāi)華為(wèi)音(yīn)樂(> yuè)APP    slee₹‌&™p(3.0)   &nb ≥sp;wait(Template(r"tpl1717384154362≠ >★.png", record_pos=(-0.388♣​¶, 0.02), resolutδ" ₹ion=(1080, 2340))) &nbs&×↓♥p;  touch(Template(•∞r"tpl1717384181392.png", rec×∑ord_pos=(-0.331, ↔¶0.439), resolution=(1•∏→080, 2340))) &¥εnbsp;  sle<→ δep(3.0)    pri  ©®nt("已打開(kāi)華為(wèi)的(de)音(yīn)樂(yuè)A♠ΩPP了(le)")def print_de"≈↕>vice_info(brand, model):  ←♥;  if brand and&n"₹bsp;model:    &$ nbsp;   print(¶♠ f"當前設備品牌: {brand}") #✔★&∏ 打印當前設備品牌  ₹      &nbs₩ p;print(f"當前設備型号: {model}")&nbs♥♠p;# 打印當前設備型号     ✘    sleep(σ÷☆3.0)    else:&n∞₽↕bsp;    ≠πσ   prin→≥δ≠t("無法獲取設備品牌和(hé)型号") # 打印無法獲取設備品牌和™₹(hé)型号if __name__ == "__main®÷∏__":   &nbs♠↕• p;# 獲取 Android 設備品牌和(↔​∑hé)型号    brand, >Ωδγmodel = get_android_φ¶device_info() # 獲取設≠₩∑備品牌和(hé)型号  &nbs©♥€∞p; print_device_¥≠αλinfo(brand, model)  &n> ♣bsp; # 将打開(kāi)各類品牌手↔™機(jī)APP寫成一(yī)個(gè)字典&nb→ sp;   music_a↑₽§×pps = {   &nbs→♠p;    "H↕☆&UAWEI": open_huawei_music, # ↕₹打開(kāi)華為(wèi)音(yīn)樂±↔λ☆(yuè)APP   ‌γ;    &nb±≠sp;"vivo": open_vivo_music, # ↕×₩ 打開(kāi)Vivo音(yīn)樂(y≤&uè)APP    &nbλ​¥sp;   "X®←✔∞iaomi": open_xiaomi_music•φ≈✘ # 打開(kāi)小(xiǎo)米音∞•(yīn)樂(yuè)APP    ♥★&$}    ≠¥σ    #在獲取<§™完設備品牌後,在字典內(nèi)找到(dào)對(duì)應的(de)方法并執®σ$₽行(xíng)    ≥☆≤→;music_app = music_apps.get(brand)&nbsλ'p;      &γ↔σ£nbsp;if music_app:&nb↓≤™≥sp;     &∑¶↕£nbsp; music_app()  &nbs"γΩp; else:  &nbs>₹'p;     prinα§∑t("沒有(yǒu)該型号适用(yòng)的(de)方法")&nbs←‍≠p;    ≤ ¶    

五、小(xiǎo)結

我們本周推文(wén)主要(yào)是(α£shì)介紹了(le)如(rú)何去(qù)分(fēn≥±₽<)辨所連接的(de)設備是(shì) Andro  λ♥id 設備還(hái)是(shì) iOS 設備,♦π以及如(rú)何分(fēn)辨 Android 設備的(de)廠(chǎng)♥¥♣✔商和(hé)型号,根據這(zhè)些(xiē)方‍Ω式,我們可(kě)以結合自(zì)己的(de)需求,進一(yī)步優化(" ₩huà)我們的(de)測試腳本以及編寫更具有(yǒu)通(tōng)用(β×β•yòng)性的(de)腳本。

如(rú)果在測試的(de)過程中,遇到(dà ↓> o)了(le)問(wèn)題,或者有(yǒu)任何想要(yà​ ¶o)深入了(le)解的(de)知(zhī" )識點,歡迎在官方交流群(526033840)裡(lǐ≠γ≠)告訴我們或者提交 issue,也(yě)歡迎 ↔✘大(dà)家(jiā)投稿其他(tā)不♣‌∞→(bù)同的(de)使用(yòng)小(xiǎo) σ‍技(jì)巧。



分(fēn)享
聯系郵箱

sxyl@sxyl.tech

單位地(dì)址:山(shān)西(xī)轉型綜合改革示範區(β∏✘qū)學府産業(yè)園産業(yè)路(lù)48号新 ♣島科(kē)技(jì)園 C 座406

分(fēn)享
版權所有(yǒu) © 版權所有(yǒu) cop•≠₹♦yright©2024山西恒添科技有限公司 京ICP證000000号 技(jì)術(shù)支持:SXYL