最近因為工作需要進行了mac系統(tǒng)下的ios真機自動化測試環(huán)境搭建牙勘,踩了很多坑,還好最后跑通了。
真機連接效果如下:
設備和主要的軟件版本如下:
iphone xs 12.3.1;mac os 10.14.5溢豆;xcode 10.2.1;appium-desk 1.13.0瘸羡;appium 無界面版 1.14.0漩仙; node.js 10.16.0;python3.7;JDK12.0.2 队他。
友情提示:建議每一條命令前添加sudo進行授權卷仑,避免permission deny 造成安裝失敗。
環(huán)境搭建
JDK安裝
去oracle官網(wǎng)https://www.oracle.com/technetwork/java/javase/downloads/index.html
下載JDK麸折,下面兩個都可以锡凝,下載需要注冊賬號。
下載完成后無腦下一步下一步就好磕谅。
詳細步驟可參考https://www.cnblogs.com/52py/p/8065066.html
安裝配置完成后在終端輸入 java -verison 如果出現(xiàn)java version "12.0.2" 2019-07-16 字樣說明安裝成功私爷。
brew
安裝homebrew:homebrew 簡稱brew,是Mac OSX上的軟件包管理工具膊夹,能在Mac中方便的安裝軟件或者卸載軟件衬浑,類似于pip、apt-get放刨、yum等神器工秩。
安裝命令
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
node.js
可用兩種方法安裝
1 官網(wǎng)下載后按照提示進行安裝
https://nodejs.org/zh-cn/
2 使用brew命令安裝
brew install node
安裝完成后在終端輸入 node -v 如果出現(xiàn) 類似v10.16.0 字樣說明安裝成功。
依賴插件ibimobiledevice进统、carthage助币、ios-deploy、xcpretty
brew install libimobiledevice --HEAD
brew install carthage
npm install -g ios-deploy
gem install xcpretty
Xcode
推薦在App Store中安裝螟碎,軟件一共6.5G左右眉菱,請保持網(wǎng)絡暢通。
Appium
appium是手機和pc之間的代理服務器掉分,完成兩者的通信處理俭缓。(沒錯,它就是個中間商)
appium-desk版本可在官網(wǎng)下載安裝http://appium.io/downloads.html
appium-server 無界面版使用npm命令安裝酥郭,但鑒于部分資源被墻华坦,建議使用淘寶鏡像。
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install -g appium #appium@1.13.0可指定安裝版本
安裝appium-doctor檢查appium環(huán)境不从。
cnmp install -g appium-doctor
終端運行appium-doctor --ios
若提示xcode未安裝在終端運行命令惜姐,設置xcode路徑。
xcode-select –switch /Applications/Xcode.app/Contents/Developer
參考http://blog.sina.com.cn/s/blog_68f262210102uz5y.html
WebDriverAgent (wda)
之前查閱了很多資料椿息,說的是appium自帶的wda有問題歹袁,無法使用inspector進行頁面元素定位,但我決定使用appium-desk進行定位就沒有單獨去下載GIthub上的wda-master寝优。
- 首先是桌面版的wda
- 文件路徑:
/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent
在終端cd到上述目錄宇攻,運行命令安裝依賴。
./Scripts/bootstrap.sh
安裝完成后點擊mac右上角的聚焦搜索倡勇,粘貼路徑敲擊回車。
-
右鍵通過Xcode打開.xcodeproj文件。
- 首先打開Xcode-performance-account登錄你的AppleID (我用的公司開發(fā)者賬戶妻熊,如果你是個人賬戶你就百度解決證書的問題)
-
在wdaLib General設置中選擇自動簽名夸浅,選擇你的公司team。bundleid 是APP的唯一標識符扔役,直接問開發(fā)獲得帆喇。
確認 wdaLib build setting 中deployment系統(tǒng)的版本
packaging 中的project bundleid 和之前填寫的是否一致。
signing簽名是否正確
-
在wdaRunner General中設置自動簽名亿胸,如果報錯提示 Try again 坯钦,不要著急,先設置build setting侈玄。
檢查build setting中packaging 的bundleid是否正確
設置簽名
-
連接上你的水果機婉刀,Scheme選擇wdarunner,destination選擇你的真機序仙。
-
點擊左上角三角形進行構建突颊,首次構建可能會要求你輸入訪問鑰匙的密碼,輸入你的賬戶密碼即可(我輸入的是開機密碼)潘悼,提示build succeeded律秃。然后點擊-product-test進行將wda安裝到真機。安裝完成后在真機的safari瀏覽器輸入 127.0.0.1:8100/status 顯示如下則表示安裝成功治唤。
- 打開appium-desk 棒动,設置ip端口號,一般保持默認即可宾添,如果你已經(jīng)開啟了無界面版的appium-sever船惨,就把端口修改和前者不同即可,高級設置也保持默認狀態(tài)辞槐,點擊start server 開啟appim服務掷漱。
(mac系統(tǒng)與windows不同,只能打開一個appium-desk榄檬,所以你要同時做多臺真機的測試那就必須要安裝無界面的appium-sever卜范。)
服務開啟成功的界面如下圖,右上角的三個方框的含義分別是:建立inspector session(用于獲取真機頁面元素);導出appium運行日志;關閉appium服務颅崩。
點擊右上角的小問號按鈕巩螃,彈出連接窗口,填入對應參數(shù)娃磺,參數(shù)具體含義可見
appium接口參數(shù)(推薦使用google瀏覽器,鼠標右鍵可翻譯頁面內(nèi)容)
-
參數(shù)填寫完成后點擊右下角start session 手機上點擊信任此電腦,并且開啟設置-開發(fā)者-enable ui automation 湾宙,轉(zhuǎn)跳到愛的魔力轉(zhuǎn)圈圈界面,第一次連接的時間可能會很長。
- 無界面版的appium wda安裝
無界面相對桌面版的優(yōu)勢是:可以多開侠鳄;占用更少的資源埠啃;啟動更快。
如果已經(jīng)獲取了頁面元素就建議使用無界面版跑測試腳本伟恶。
路徑/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent
同上碴开,cd到目錄執(zhí)行命令后使用xcode構建。
./Scripts/bootstrap.sh
如果之前安裝過appium-desk的wda 博秫,xcode會卸載后重新安裝潦牛,安裝過程中如果提示application install failed 就手動卸載真機上的wda。
敲黑板
安裝誰的wda就用誰去連接真機挡育。
比如說:我通過xcode構建了appium-desk版的wda到真機上巴碗,那么我就只能通過desk版去連接真機,不能通過無界面appium+python連接静盅!
Python
mac 系統(tǒng)自帶python2良价,可通過官網(wǎng)下載并安裝python3,在終端輸入python3進入python IDE說明安裝成功蒿叠。
pip
pip 是 Python 包管理工具,該工具提供了對Python 包的查找明垢、下載、安裝市咽、卸載的功能痊银,目前如果你在 python.org 下載最新版本的安裝包,則是已經(jīng)自帶了該工具施绎。
你可以通過以下命令來判斷是否已安裝:
pip3 --version
安裝成功提示如下
如果提示c'ommand not found可以通過如下命令安裝
sudo easy_install pip
appium-python-client
appium-python-client 是讓 python 連接 appium 服務的一個驅(qū)動溯革,也就是一個 python 語言封裝和 appium api 通訊的一個庫。
安裝方法:
pip install Appium-Python-Client
驗證:
引入webdriver模塊不報錯谷醉。
測試腳本
至此我們的ios測試環(huán)境已經(jīng)部署的差不多了致稀,接下來就用腳本進行測試吧。
- 通過xcode給真機構建wda
- 啟動appium服務(有無界面版均可)
- 編寫腳本俱尼,通過入口參數(shù)連接至appium
- 執(zhí)行腳本
# coding=utf-8
from appium import webdriver
import time
class Appium:
# 啟動app
def __init__(self):
desired_caps = {}
desired_caps['platformName'] = 'iOS' # 設備系統(tǒng)
desired_caps['platformVersion'] = '12.3.1' # 設備系統(tǒng)版本
desired_caps['deviceName'] = 'WANG的 iPhone' # 設備名稱
desired_caps['bundleId'] = 'com.xxx.xxx' # 測試app包名
desired_caps['udid'] = 'xxxxxx-xxxxxxxx' #設備id
desired_caps['automationName'] = 'XCUITest' # 測試框架
desired_caps['noReset']='true' # 保留app的登錄狀態(tài)
desired_caps['xcodeSigningId']='iOS Developer'
desired_caps['xcodeOrgId']='aaaaa' # 團隊id
desired_caps['newCommandTimeout']=3600
self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) # 保持端口號和appium服務端口一致
# 使用隱式等待或者顯示等待抖单,盡量減少time.sleep強制等待的使用提高腳本執(zhí)行速度。
self.driver.implicitly_wait(5)
def test(self):
# 點擊一個id定位的元素
self.driver.find_element_by_accessibility_id("").click()
# 此處使用time.sleep是為了能讓肉眼區(qū)分操作遇八。
time.sleep(1)
# 點擊一個xpath定位的元素
self.driver.find_element_by_xpath("").click()
time.sleep(1)
# 給輸入id定位的輸入框傳值
self.driver.find_element_by_accessibility_id("").set_value("iostest")
time.sleep(1)
# 截圖保存到當前文件
self.driver.save_screenshot('./1.png')
time.sleep(2)
# 關閉app
self.driver.close_app()
if __name__ == '__main__':
a =Appium()
a.test()