WebDriverAgent xcode16 打包的 app 自動化真多坑(問題篇)
背景
基於 airtest 維護的 wda 執行的 ios 自動化 iOS-Tagent 地址
import wda #程式碼執行的驅動,需要pip install python-wda
問題的出現
ios 的打包環境的 xcode 升級到 xcode16 之後,ios 自動化全軍覆沒
直觀的問題
- 原生 exists、click_exists 方法出現混亂,原先不存在的元素,現在變成存在,如影片全屏時的按鈕,點選螢幕後按鈕隱藏了,但是檢視元素會變成存在,且元素在螢幕外
- 1、開發無果、文件未見 ,準備修改之前自行封裝的 exists、click_exists 方法
- 2、初步判斷為 xcode16 導致"不可見的也可能變成存在"
if element.exists:
if element.visible:
修改後大部分 exists 準確,然後出現新問題:"部分元素在舊版 xcode 打包出來的,visible 是 True,新版是的 False"
執行後決定自由選擇 exists 的時候是否需要判斷 visible
#text/label的都不傳find_by_str,指向label
#1、 self.exe_exists("""主動防禦設定,警報聲設定""") 只校驗存在,不管visible
#2、 self.exe_exists("""警報聲設定""") ,強校驗,必須visible==True
#3、 self.exe_exists("""//*[@label="警報聲設定"] ""","""self.driver.xpath('//*[@label="警報聲設定"]') """),str_value可以隨意傳. 強校驗,必須visible==True
def exe_exists(self, str_value, find_by_str='label'):
#僅核心程式碼
str_value = str_value
list1 = []
list2 = []
if find_by_str == 'label':
list = str_value.split(',')
# 檢查list[0]是否是整數
if list and list[0].isdigit():#如果是 1,hello,word ,逗號第一位是數字,後面的hello,word就是一個整體,實際判斷“hello,word”
# 合併list[1:]為一個字串
merged = ','.join(list[1:])
list=[]
list[0] = merged
for i in list:
if self.driver(label=i).exists:
if len(list) == 1: # 只有一個資料時,按嚴格判斷存在,直接失敗
if self.driver(label=i).visible:
list1.append(i)
else:
self.add_screenshot_strs(f"visible false{i}")
list2.append(i) # 加到錯誤列表中
else:
list1.append(i) # 多條資料時不嚴格,存在就可以
else:#完全不存在
self.add_screenshot_strs(f"完全不存在{i}")
list2.append(i) # 加到錯誤列表中
else:
element = eval(find_by_str)#這裡的find_by_str是我封裝過的,實際上是個字串,如 "driver(text="裝置設定")"
if element.exists:
if element.visible:
if len(list2) > 0:
self.add_screenshot_strs(f"不存在值self.exe_exists(" + ','.join(list2))
- click_exists 可以過分一點必須 visible==True
def click_exists_screenshot(self, find_by_str, api_value):
self.add_screenshot_strs(f"click_exists_screenshot({find_by_str},{api_value})")
element = eval(find_by_str)
if element.exists:
if element.visible == True:
self.screenshot()
# self.click_screenshot(find_by_str, api_value)#直接去點選 或者直接用下面的原生方法
element.click_exists()
多次通訊導致速度降低
#原先
if self.driver(label=i).exists:
if self.driver(label=i).visible:
#提速
if self.driver(label=i,visible=True).exists:#存在且顯示
執行過程中發現可能 提速後的結果可能不正確,下面 2 種方式,方式 2 得到的 exists 為 False。對比 Xcode15 的 app 版本,確定是 Xcode16 引起的
# 方式1
if self.driver(label="更多日期").exists: #元素審查器看到的值
if self.driver(label="更多日期").visible:
print("存在")
# 方式2
if driver(label='更多日期',visible=True).exists:
print("存在")
繼續補救
for i in list:
if self.driver(label=i,visible=True).exists: #優先用提速的方式,提速失敗後,再執行一次未提速的方法
list1.append(i)
else:
if self.driver(label=i).exists:
if len(list) == 1: # 只有一個資料時,按嚴格判斷存在,直接失敗
if self.driver(label=i).visible:
list1.append(i)
else:
self.add_screenshot_strs(f"visible false{i}")
list2.append(i) # 加到錯誤列表中
else:
list1.append(i) # 多條資料時不嚴格,存在就可以
else:#完全不存在
self.add_screenshot_strs(f"完全不存在{i}")
list2.append(i) # 加到錯誤列表中
有其他避坑方式請留言
有其他坑 請留言
相關文章
- iOS自動化打包部署踩坑記iOS
- 有償線上求答案,ios-ui 自動化 webdriveragent 問題 2 個iOSUIWeb
- ios 自動化,尋求 WebDriverAgent 最佳化方案iOSWeb
- APP打包上線應注意的問題!APP
- Python的iOS自動化打包PythoniOS
- app 自動化 (真機)+jenkins 進行執行問題APPJenkins
- 介面自動化報告的問題
- iOS自動化打包(fastlane使用)iOSAST
- iOS自動化編譯打包iOS編譯
- WebDriverAgent重簽名爬坑記Web
- 陷入jenkins自動化部署的坑Jenkins
- 【pytest 介面自動化】token 問題
- iOS如何實現自動化打包iOS
- 使用 fastlane 實現自動化打包AST
- 關於vue的webpack打包優化問題VueWeb優化
- 自動化的開篇(一)
- 【填坑指南】webpack圖片路徑與打包問題Web
- 避坑指南:Golang框架自動化測試中的常見問題與解決方案大全Golang框架
- fastlane 自動化打包工具實踐AST
- 關於jenkins自動化打包探索Jenkins
- 安卓自動化打包環境搭建安卓
- ReactNative專案自動化打包釋出React
- uni-app專案打包成apk(本地打包篇)APPAPK
- 記一次iOS自動化打包走過的坑-關於React Native-iOS專案iOSReact Native
- 一個 UI 自動化問題諮詢UI
- UI 自動化元素定位規範問題UI
- appium 能打包成 apk,啟動這個 apk 就能調起待測 app 自動化麼APPAPK
- webpack dll打包重複問題優化Web優化
- 自動化測試篇
- (踩坑記錄)關於docker run命令啟動elasticsearch自動退出問題DockerElasticsearch
- React Native專案自動化打包釋出React Native
- iOS--利用Fastlane實現自動化打包iOSAST
- 合同審查自動化-智慧化尋找合同問題
- 【Mac + Python3.6 + ATX基於facebook-wda】之IOS自動化(一):WebDriverAgent安裝MacPythoniOSWeb
- vue 自動化部署 jenkins 篇VueJenkins
- 3種方式自動化控制APPAPP
- robotframework + appium進行自動化測試時遇到的問題FrameworkAPP
- 如何解決自動化切換資料庫的問題資料庫