Mac 搭建Appium自動(dòng)化測(cè)試環(huán)境

環(huán)境搭建列表

  • 通用環(huán)境
    • Homebrew
    • Node & NPM
    • JDK
    • Carthage
    • Appium
    • Appium Doctor
  • iOS 環(huán)境
    • Xcode
    • ios-deploy
    • ideviceinstaller & libimobiledevice
    • ios_webkit_debug_proxy
  • Android 環(huán)境
    • android-sdk
    • platform-tools
    • build-tools
    • emulator

通用環(huán)境

Ⅰ 安裝 Homebrew

Homebrew是一個(gè)包管理軟件,它可以使我們更容易地安裝其他一些軟件,終端輸入安裝

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

如果安裝失敗(網(wǎng)速不行等。。),可以打開(kāi)網(wǎng)址:https://raw.githubusercontent.com/Homebrew/install/master/install
將其內(nèi)容保存為homebrew.txt(鏈接: 下載 提取碼: 8htr),然后終端輸入:

/usr/bin/ruby homebrew.txt

此步驟還順帶安裝了Xcode命令行工具。

Ⅱ 安裝 Node & NPM

Node是一個(gè)javascript運(yùn)行時(shí)環(huán)境,npm是節(jié)點(diǎn)包管理器。我們需要這些,因?yàn)锳ppium是一個(gè)節(jié)點(diǎn)應(yīng)用程序。在終端中,輸入以下命令(此命令也將安裝npm):

brew install node

Ⅲ 安裝 JDK

下載 Java jdk ,按步驟安裝,安裝完成后需要在.bash_profile設(shè)置 JAVA_HOME ,設(shè)置之前你可以通過(guò)下邊的命令查看Java的安裝路徑,terminal輸入:

/usr/libexec/java_home --v

輸出路徑:

/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home

通過(guò)vim 編輯.bash_profile文件,終端輸入:

vim ~/.bash_profile

i鍵進(jìn)入編輯模式,移動(dòng)到最下邊加入如下兩行(路徑為之前查看的):

# [改為你自己的java_home路徑]
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

添加后按 Esc按鍵,輸入:wq保存并退出編輯。輸入使其生效(或重啟終端):

source  ~/.bash_profile

Ⅳ 安裝 Carthage

Carthage是一個(gè)依賴管理器,WebDriverAgent需要它,終端輸入:

brew install carthage

Ⅴ 安裝 Appium

Appium(Version 1.15.1)是一個(gè)用于本地、混合和移動(dòng)web應(yīng)用程序的開(kāi)源測(cè)試自動(dòng)化框架。它使用WebDriver協(xié)議驅(qū)動(dòng)iOS、Android和Windows mobile應(yīng)用程序。終端安裝server版輸入:

# 安裝 server 版
npm install -g appium

默認(rèn)安裝最新的版本,如果想安裝指定的版本:

npm install -g appium@1.7.2

卸載 Appium:

npm uninstall -g appium
npm cache clean --force

安裝桌面版(因?yàn)樽烂姘娣奖阍囟ㄎ唬?a target="_blank">下載 相應(yīng)的版本進(jìn)行安裝(安裝兩種方式,方便使用)。

Ⅵ 安裝 Appium Doctor

Appium doctor是一個(gè)小型軟件,它檢查Appium成功運(yùn)行的所有(幾乎所有)前提條件。終端輸入:

npm install -g appium-doctor

appium-doctor的輸出應(yīng)該是這樣的:

在這里插入圖片描述

IOS

Ⅶ 安裝Xcode和模擬器

啟動(dòng)Mac應(yīng)用程序商店并下載/安裝Xcode(Version 10.1)。安裝之后,啟動(dòng)Xcode并選擇
Xcode > Preferences > Components 來(lái)安裝可能想要測(cè)試的模擬器。

如果已經(jīng)安裝過(guò)xcode,appium-doctor提示未安裝,則運(yùn)行命令即可:
sudo xcode-select -r

Tips:

# 查看已啟動(dòng)的模擬器udid
xcrun simctl list | grep '(Booted)'  
# 列出所有設(shè)備,包括真機(jī)、模擬器、mac
instruments -s devices 
#錄像 
xrecord --quicktime --list
xrecord --quicktime --name="iPhone" --out="/Users/blah/video/iphone.mp4" --force

模擬器相關(guān)命令參考:這里

Ⅷ 安裝 libimobiledevice & ideviceinstaller

libimobiledevice 是一個(gè)跨平臺(tái)的軟件庫(kù),支持 iPhone?, iPod Touch?, iPad? and Apple TV? 等設(shè)備的通訊協(xié)議。不依賴任何已有的私有庫(kù),不需要越獄。應(yīng)用軟件可以通過(guò)這個(gè)開(kāi)發(fā)包輕松訪問(wèn)設(shè)備的文件系統(tǒng)、獲取設(shè)備信息,備份和恢復(fù)設(shè)備,管理 SpringBoard 圖標(biāo),管理已安裝應(yīng)用,獲取通訊錄、日程、備注和書(shū)簽等信息,使用 libgpod 同步音樂(lè)和視頻。
ideviceinstaller 是一個(gè)與iOS設(shè)備的installation_proxy交互的工具,允許安裝、升級(jí)、卸載、存檔、還原和列舉已安裝或存檔的應(yīng)用程序。此工具用于在真機(jī)上運(yùn)行測(cè)試,默認(rèn)是都安裝的。

brew install libimobiledevice --HEAD   # 安裝最新的更新,支持 iOS 10
brew install ideviceinstaller  # 僅在 iOS9工作

如果安裝時(shí)遇到: "invalid active developer path" 則運(yùn)行:

xcode-select --install
sudo xcode-select -r

問(wèn)題
dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib Referenced from:
/usr/local/opt/libimobiledevice/lib/libimobiledevice.6.dylib Reason: image not found
如果遇到如上錯(cuò)誤,則先卸載ideviceinstaller 和 libimobiledevicebrew uninstall ideviceinstaller ,brew uninstall libimobiledevice),然后再重安裝即可

Tips:

  1. 獲取設(shè)備的udid

    idevice_id --list   # 略寫(xiě)為 -l 顯示當(dāng)前所連接設(shè)備的 udid
    idevice_id -l      # 顯示當(dāng)前所連接的設(shè)備[udid],包括 usb、WiFi 連接
    instruments -s devices  # 列出設(shè)備包括模擬器、真機(jī)及 mac 電腦本身
    ideviceinfo   #  可以在返回的數(shù)據(jù)中找到 udid
    # 蘋(píng)果手機(jī) safari打開(kāi)網(wǎng)址http://fir.im/udid 就看到了    
    
  2. 安裝應(yīng)用

    xxx.ipa為應(yīng)用在本地的路徑
    ideviceinstaller -i apppath # 安裝apppath下的app
    ideviceinstaller -u [udid] -i [xxx.ipa] # 給指定連接的設(shè)備安裝應(yīng)用
    
  3. 卸載應(yīng)用

    bundleId為應(yīng)用的包名
    ideviceinstaller -u [udid] -U [bundleId] # 給指定連接的設(shè)備卸載應(yīng)用
    
  4. 查看設(shè)備已安裝的應(yīng)用

    ideviceinstaller -l  #列出手機(jī)上所有用戶安裝的app
    運(yùn)行某個(gè)app
    idevicedebug run 'APP_BUNDLE_ID'  # 可以直接launch某個(gè)app,當(dāng)然,這個(gè)app必須是你通過(guò)development證書(shū)build到手機(jī)上的才行
    ideviceinstaller -u [udid] -l                   # 指定設(shè)備,查看安裝的第三方應(yīng)用
    ideviceinstaller -u [udid] -l -o list_user      # 指定設(shè)備,查看安裝的第三方應(yīng)用
    ideviceinstaller -u [udid] -l -o list_system    # 指定設(shè)備,查看安裝的系統(tǒng)應(yīng)用
    ideviceinstaller -u [udid] -l -o list_all       # 指定設(shè)備,查看安裝的系統(tǒng)應(yīng)用和第三方應(yīng)用
    
  5. 獲取設(shè)備信息

    ideviceinfo -u [udid]                       # 指定設(shè)備,獲取設(shè)備信息
    ideviceinfo -u [udid] -k DeviceName         # 指定設(shè)備,獲取設(shè)備名稱:iPhone6s
    idevicename -u [udid]                       # 指定設(shè)備,獲取設(shè)備名稱:iPhone6s
    ideviceinfo -u [udid] -k ProductVersion     # 指定設(shè)備,獲取設(shè)備版本:10.3.1
    ideviceinfo -u [udid] -k ProductType        # 指定設(shè)備,獲取設(shè)備類(lèi)型:iPhone8,1
    ideviceinfo -u [udid] -k ProductName        # 指定設(shè)備,獲取設(shè)備系統(tǒng)名稱:iPhone OS
    
  6. 其他系統(tǒng)文件信息

    idevicescreenshot # 截圖
    ideviceinfo  # 獲取設(shè)備所有信息
    idevicesyslog  # 獲取設(shè)備日志
    idevicecrashreport -e test  # 獲取設(shè)備 crashlog,test 是文件夾需新建
    idevicediagnostics  restart  # (shutdown、sleep)管理設(shè)備狀態(tài) - 重啟、關(guān)機(jī)、睡眠等
    

Ⅸ 安裝 ios-deploy

ios-deploy 同樣是一個(gè)不需要用Xcode安裝和調(diào)試應(yīng)用的命令行工具。需要一個(gè)有效的開(kāi)發(fā)者證書(shū),需要 Xcode 7以上的版本。終端輸入:

brew install ios-deploy

Tips:

  1. 安裝應(yīng)用

    ios-deploy -c  # 查看當(dāng)前鏈接的設(shè)備,獲取udid
    # xxx.app為 Xcode 編譯后的應(yīng)用安裝包路徑
    ios-deploy --id [udid] --bundle [xxx.app] # 給指定應(yīng)用安裝應(yīng)用
    
  2. 卸載應(yīng)用

    ios-deploy --id [udid] --uninstall_only --bundle_id [bundleId] # 給指定連接的設(shè)備卸載應(yīng)用
    
  3. 查看設(shè)備已安裝的應(yīng)用

    ios-deploy --id [udid] --list_bundle_id     # 查看設(shè)備安裝的所有應(yīng)用,包括系統(tǒng)應(yīng)用和第三方應(yīng)用
    ios-deploy --id [udid] --exists --bundle_id     # 指定設(shè)備檢查指定應(yīng)用是否已經(jīng)安裝
    

Ⅹ 安裝 ios_webkit_debug_proxy

Appium使用ios_webkit_debug_proxy這個(gè)工具在真機(jī)上訪問(wèn)web view。在終端中,運(yùn)行以下命令:

brew install ios-webkit-debug-proxy

至此iOS環(huán)境搭建完畢!?。≈贿m用于模擬器,真機(jī)的話還需要配置。

Ⅺ iOS真機(jī)手動(dòng)配置

查看appium的安裝位置,正常npm安裝的位置應(yīng)該在/usr/local/bin/appium

which appium
# /usr/local/bin/appium

命令行安裝的appium一般安裝在/usr/local/bin/appium下,WebDriverAgent將會(huì)在路徑:/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/ 下;如果是桌面版的,WebDriverAgent的路徑是:/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/

# 命令行版
cd  /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/
# 桌面版
cd /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/

首先查看路徑(/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent)下有沒(méi)有WebDriverAgent.xcodeproj(有的話跳過(guò)下邊,直接用Xcode打開(kāi)即可),沒(méi)有的話直接打開(kāi)終端運(yùn)行如下命令搭建項(xiàng)目:

cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/
mkdir -p Resources/WebDriverAgent.bundle
./Scripts/bootstrap.sh -d

然后用Xcode 打開(kāi) WebDriverAgent.xcodeproj,在 "General" 下將 WebDriverAgentLibWebDriverAgentRunner設(shè)置成 "Automatically manage signing" 并在 "Team" 中選擇你的開(kāi)發(fā)團(tuán)隊(duì) ;

在這里插入圖片描述

Xcode可能無(wú)法為WebDriverAgentRunner目標(biāo)創(chuàng)建配置文件(Failed to create...)
在這里插入圖片描述

這需要手動(dòng)更改目標(biāo)的bundle id,方法是進(jìn)入“Build Settings”選項(xiàng),更改“Product bundle Identifier”的值使Xcode將接受,默認(rèn)為com.facebook.WebDriverAgentRunner
在這里插入圖片描述

返回 "General" 選項(xiàng),看到對(duì)于文件WebDriverAgentRunner的配置文件已經(jīng)創(chuàng)建成功了
在這里插入圖片描述

最后,build項(xiàng)目:
通過(guò)Xcode獲取udid
在這里插入圖片描述

在這里插入圖片描述

# 利用ios-deploy獲取,其他參考上邊的介紹
ios-deploy -c 
cd /usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=<udid>' test

即:

xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=1A7A0E9D-98AE-4230-BC92-13F66901FCBA' test

最終看到這樣輸出就是成功了:

Test Suite 'All tests' started at 2017-01-23 15:49:12.585
Test Suite 'WebDriverAgentRunner.xctest' started at 2017-01-23 15:49:12.586
Test Suite 'UITestingUITests' started at 2017-01-23 15:49:12.587
Test Case '-[UITestingUITests testRunner]' started.
t = 0.00s Start Test at 2017-01-23 15:49:12.588
t = 0.00s Set Up

在這里插入圖片描述

驗(yàn)證是否安裝成功,確保手機(jī)和電腦連接同一個(gè)WiFi(同一局域網(wǎng)內(nèi)):

export DEVICE_URL='http://<device IP>:8100'
export JSON_HEADER='-H "Content-Type: application/json;charset=UTF-8, accept: application/json"'
curl -X GET $JSON_HEADER $DEVICE_URL/status

將會(huì)看到類(lèi)似的輸出:

{
      "value" : {
        "state" : "success",
        "os" : {
          "name" : "iOS",
          "version" : "10.2"
        },
        "ios" : {
          "simulatorVersion" : "10.2",
          "ip" : "192.168.0.7"
        },
        "build" : {
          "time" : "Jan 23 2017 14:59:57"
        }
      },
      "sessionId" : "8951A6DD-F3AD-410E-A5DB-D042F42F68A7",
      "status" : 0
    }

在這里插入圖片描述

然后會(huì)看到真機(jī)上安裝了WebDriverAgentRunner應(yīng)用:

安裝成功后運(yùn)行如果遇到這樣的錯(cuò)誤:

2017-01-24 09:02:18.358 xcodebuild[30385:339674] Error Domain=com.apple.platform.iphoneos Code=-12 "Unable to launch com.apple.test.WebDriverAgentRunner-Runner" UserInfo={NSLocalizedDescription=Unable to launch com.apple.test.WebDriverAgentRunner-Runner, NSUnderlyingError=0x7fa839cadc60 {Error Domain=DTXMessage Code=1 "(null)" UserInfo={DTXExceptionKey=The operation couldn’t be completed. Unable to launch com.apple.test.WebDriverAgentRunner-Runner because it has an invalid code signature, inadequate entitlements or its profile has not been explicitly trusted by the user. : Failed to launch process with bundle identifier 'com.apple.test.WebDriverAgentRunner-Runner'}}}
2017-01-24 09:02:18.358 xcodebuild[30385:339674] Error Domain=IDETestOperationsObserverErrorDomain Code=5 "Early unexpected exit, operation never finished bootstrapping - no restart will be attempted" UserInfo={NSLocalizedDescription=Early unexpected exit, operation never finished bootstrapping - no restart will be attempted}

Testing failed:
    Test target WebDriverAgentRunner encountered an error (Early unexpected exit, operation never finished bootstrapping - no restart will be attempted)

問(wèn)題是該應(yīng)用在設(shè)備上不受信任。如果你手動(dòng)嘗試在設(shè)備上運(yùn)行WebDriverAgent應(yīng)用,你會(huì)看到一個(gè)彈出消息:

在這里插入圖片描述

你可以通過(guò)Settings => General =>Device Management 來(lái)信任開(kāi)發(fā)者并允WebDriverAgentRunner應(yīng)用程序運(yùn)行。
至此iOS真機(jī)運(yùn)行環(huán)境配置完畢,你可以進(jìn)行真機(jī)測(cè)試了~~
Tips:
<font color=red> 真機(jī)運(yùn)行必須添加這兩個(gè)參數(shù):</font>

  {   
      # xcodeOrgId 類(lèi)似:TEST INTERNATIONAL
      "xcodeOrgId": "<Team ID>",
      # xcodeSigningId是一個(gè)由Apple生成的唯一的10個(gè)字符的字符串,類(lèi)似 6387P24J3L
      "xcodeSigningId": "iPhone Developer"
    }

這兩個(gè)字段獲?。?/p>

Android 環(huán)境

安裝Android環(huán)境可以使用直接使用 Android studio來(lái)安裝,但是會(huì)下載好多無(wú)用的東西,占用內(nèi)存。可以選擇下邊的Command line tools only通過(guò)命令行安裝(命令行安裝可能會(huì)失敗,多試幾次就好)。這里只介紹用命令行安裝的方法。

該方法會(huì)安裝在 /usr/local/Caskroom/android-sdk/4333796/ 目錄下 4333796為android-SDK的版本號(hào)
該目錄下要存在 tools、platform-tools、build-tools 三個(gè)文件夾,否則這個(gè)環(huán)境還是會(huì)存在問(wèn)題的; 如果沒(méi)有,需要運(yùn)行安裝、或移動(dòng) platform-tools 文件夾,可以將
/usr/local/Caskroom/android-platform-tools/29.0.5/ 目錄下的 platform-tools 文件夾復(fù)制過(guò)來(lái)

Ⅻ 安裝 android-sdk

終端運(yùn)行:

brew cask install android-sdk
在這里插入圖片描述

XIII 安裝 build-tools

sdkmanager  --install  "build-tools;29.0.2"

XIV 安裝 platform-tools

  • sdkmanager 安裝(sdkmanager 詳細(xì)命令參考:這里

    # 使用sdkmanager 安裝
    sdkmanager  --install  "platform-tools" "platforms;android-29"
    
  • 非 sdkmanager 安裝

    # 如果上邊的失敗,則使用brew 安裝(此安裝完成后需要將platform-tools移
    # 動(dòng)到 /usr/local/Caskroom/android-sdk/4333796/ 下)
    brew cask install android-platform-tools
    # 安裝完成后移動(dòng)
    mv /usr/local/Caskroom/android-platform-tools/29.0.5/platform-tools/  /usr/local/Caskroom/android-sdk/4333796/
    
在這里插入圖片描述

完成后查看:

cd /usr/local/Caskroom/android-sdk/4333796/ && ls
# 將會(huì)看到  tools、platform-tools、build-tools 三個(gè)文件夾

然后在在 ~/.bash_profile 中配置ANDROID_HOME,終端輸入: vim ~/.bash_profile,然后點(diǎn)擊i鍵進(jìn)入編輯模式,添加如下:

export ANDROID_HOME=/usr/local/Caskroom/android-sdk/4333796
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

然后運(yùn)行:

source ~/.bash_profile

再次執(zhí)行 appium-doctor 檢查 appium 環(huán)境,如下:

在這里插入圖片描述

至此Android環(huán)境搭建完成了?。?!真機(jī)可直接運(yùn)行。
如果需要使用 android 模擬器,則需要第XIV步安裝模擬器

XV 安裝 emulator

首先需要下載鏡像文件:

# 查看所有可安裝的組件
sdkmanager --list --verbose
# 更新組件
sdkmanager --update
# 安裝
sdkmanager --install "system-images;android-28;google_apis;x86"

然后下載硬件加速器:

sdkmanager --install "extras;intel;Hardware_Accelerated_Execution_Manager"

下一步創(chuàng)建模擬器:
avdmanager 詳細(xì)介紹參考:這里

avdmanager create avd -n test -k "system-images;android-28;google_apis;x86" -b x86 -c 100M -d 7 -f

最后運(yùn)行模擬器:

# test 為上邊創(chuàng)建模擬器的名稱(-n test)
emulator -avd  test
# 或者
emulator  @test

Tips:

啟動(dòng)時(shí)如果如報(bào)這個(gè)錯(cuò)誤 PANIC: Missing emulator engine program for 'x86' CPU.
則說(shuō)明不能使用tools下的emulator,直接選擇/usr/local/Caskroom/android-sdk/4333796/emulator/emulator @test 啟動(dòng)嘗試(嘗試tools目錄下的emulator和emulator目錄下的哪個(gè)可以用哪個(gè))

在這里插入圖片描述

XVI 運(yùn)行測(cè)試代碼

此處只簡(jiǎn)單演示Python代碼,詳情參考:這里
安裝Python版的客戶端:

pip install appium-python-client

如果提示:'pip: command not found',根據(jù)自己Python的版本運(yùn)行命令(Python 3的話后邊改為3):

brew install python@2

這樣安裝后運(yùn)行python腳本需要使用:python2 test_android.py
運(yùn)行test_android.py腳本(測(cè)試計(jì)算器):
真機(jī)還是模擬器自行切換注釋代碼?。?! 腳本下載

# coding=utf-8
import unittest
from appium import webdriver
import time
import os


class AndroidSimpleTest(unittest.TestCase):
    def setUp(self):
        calculator_desired_caps = {
                'platformName': 'Android',
                'platformVersion': '9.0',
                # emulator
                'deviceName': 'emulator-5554',
                'appPackage': 'com.android.calculator2',
                'appActivity': 'com.android.calculator2.Calculator'
                # real device
                # 'deviceName': '520381b347dd148b',
                #'appPackage': 'com.sec.android.app.popupcalculator',
                #'appActivity': 'com.sec.android.app.popupcalculator.Calculator'
            }
        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', calculator_desired_caps)
    
    def tearDown(self):
        self.driver.quit()
    
    def test_calculator(self):
        # real device
        #self.driver.find_element_by_accessibility_id("5").click()
        #self.driver.find_element_by_accessibility_id("Plus").click()
        #self.driver.find_element_by_accessibility_id("6").click()
        #self.driver.find_element_by_accessibility_id("Equal").click()
        #self.assertEqual(self.driver.find_element_by_id("txtCalc").text, "11")
        
        # ************
        # emulator
        self.driver.find_element_by_id("digit_5").click()
        self.driver.find_element_by_accessibility_id("plus").click()
        self.driver.find_element_by_id("digit_6").click()
        self.driver.find_element_by_accessibility_id("equals").click()
        self.assertEqual(self.driver.find_element_by_id("result").text, "11")
    
    @unittest.skip("skip")
    def test_something(self):
        pass

if __name__ == '__main__':
    unittest.main()

運(yùn)行test_ios.py腳本(TestApp ):
應(yīng)用于iOS模擬器?。。?/code> TestApp 下載,腳本下載

# coding=utf-8
import unittest
from appium import webdriver
import time
import os


class IosSimpleTest(unittest.TestCase):
    def setUp(self):
        desired_caps = {
              "platformName": "iOS",
              "platformVersion": "12.1",
              "deviceName": "iPad Pro",
              "noReset": True,
              "udid": "1A7A0E9D-98AE-4230-BC92-13F66901FCBA",
              "orientation": "LANDSCAPE",
              "connectHardwareKeyboard":True,
              "app": "/Users/XXXX/Downloads/TestApp.app"
            }
        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

    def tearDown(self):
        self.driver.quit()

    def test_something(self):
        input_field_A = self.driver.find_element_by_accessibility_id("IntegerA")
        input_field_A.clear()
        input_field_A.send_keys('8')
        input_field_B = self.driver.find_element_by_accessibility_id("IntegerB")
        input_field_B.clear()
        input_field_B.send_keys('6')
        self.driver.find_element_by_accessibility_id("ComputeSumButton").click()
        answer = self.driver.find_element_by_accessibility_id("Answer")
        # self.assertEqual(answer.text, "14")
        self.assertEqual(answer.get_attribute("value"), "14")
        time.sleep(5)


if __name__ == '__main__':
    unittest.main()

iOS真機(jī)運(yùn)行test_ios_real.py腳本:
腳本下載:這里,運(yùn)行前確保build進(jìn)程存在(或者直接運(yùn)行前執(zhí)行該命令):

cd /usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent && xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=<udid>' test
# coding=utf-8
import unittest
from appium import webdriver
import time
import os


class IosSimpleTest(unittest.TestCase):
    def setUp(self):
        desired_caps = {
              "platformName": "iOS",
              "platformVersion": "11.2",
              "deviceName": "Red’s iPad (2)",
              "noReset": True,
              "udid": "34861df52360e9243cfd7acb75801e1d58d6746f",
              "orientation": "LANDSCAPE",
              "xcodeOrgId":"TEST INTERNATIONAL",
              "xcodeSigningId":"6387P24J3L",
              "app": "/Users/XXXX/Desktop/test_ios/your.app"
            }
        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

    def tearDown(self):
        self.driver.quit()

    def test_something(self):
        input_field = self.driver.find_elements_by_ios_predicate('type == "XCUIElementTypeTextField"')[1]
        input_field.clear()
        time.sleep(2)
        input_field.send_keys('123456@test.com')
        password=self.driver.find_element_by_ios_predicate('type=="XCUIElementTypeSecureTextField"')
        password.clear()
        time.sleep(2)
        password.send_keys('123456@test.com')
        password.send_keys('\n')
        time.sleep(10)


if __name__ == '__main__':
    unittest.main()


Tips:

# 查看設(shè)備名(deviceName)
adb devices 
# 查看模擬器版本號(hào)(platformVersion)
adb shell getprop ro.build.version.release
# 查看appPackage、appActivity,運(yùn)行命令時(shí)要確保打開(kāi)了應(yīng)用
# 例如:首先打開(kāi)計(jì)算器,然后運(yùn)行命令即可獲取到(以 / 隔開(kāi),前邊appPackage,后邊 appActivity )
# 如果是Windows,則把 grep 換成 findstr 
adb shell dumpsys window windows | grep "Current" 

# **********iOS************
# 安裝 app
xcrun simctl install booted /Users/XXXX/Downloads/TestApp.app/
# 獲取名稱和udid(先啟動(dòng)模擬器,再運(yùn)行命令)
xcrun simctl list | grep "(Booted)"

其他adb相關(guān)命令查看:這里
其他xcrun simctl相關(guān)命令查看:這里

XVII 問(wèn)題解決

問(wèn)題一
".android/repositories.cfg could not be loaded."
這個(gè)問(wèn)題是因?yàn)槿鄙?code>repositories.cfg
文件,直接運(yùn)行 mkdir -p .android && touch ~/.android/repositories.cfg 即可

問(wèn)題二
"PANIC: can`t find avd system path"
檢查SDK目錄是否有至less4個(gè)目錄: emulator , platforms , platform-tools , system-images
缺少哪個(gè)安裝哪個(gè),安裝方法:
sdkmanager --install "emulator"
sdkmanager --install "platforms;android-26"
sdkmanager --install "system-images;android-26;google_apis;x86"
參考:這里

問(wèn)題三
"library not found at ../emulator/lib64/qt/lib"
需要用tools下的emulator啟動(dòng)虛擬設(shè)備即可(嘗試tools目錄下的emulator和emulator目錄下的哪個(gè)可以)

問(wèn)題四
"Original error: Could not find 'adb' in PATH"
這個(gè)問(wèn)題首先確保ANDROID_HOME設(shè)置正確的話(使用server版啟動(dòng)沒(méi)問(wèn)題),啟動(dòng) Appium 桌面版引起的,因?yàn)檎0惭b后啟動(dòng)需要在桌面版配置JAVA_HOME 和 ANDROID_HOME,配置后即可解決


在這里插入圖片描述

問(wèn)題五
"Original error: Error Domain=com.facebook.WebDriverAgent Code=1 "Keyboard is not present" UserInfo={NSLocalizedDescription=Keyboard is not present}" mac 跑模擬器的時(shí)候,當(dāng)定位到了輸入框,但是無(wú)法輸入內(nèi)容,會(huì)報(bào)如上到錯(cuò)誤,這是由于模擬器的鍵盤(pán)沒(méi)有被彈出導(dǎo)致的
兩種解決方案:
一是 直接在 desired_caps 中添加 "connectHardwareKeyboard":True 這一配置即可,配置參考:這里
二是 打開(kāi)APP,定位到輸入框,然后在鍵盤(pán)上用快捷鍵 command+shift+k,看到鍵盤(pán)彈出即可

參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容