Mac 搭建Appium自動化測試環境
環境搭建列表
- 通用環境
- Homebrew
- Node & NPM
- JDK
- Carthage
- Appium
- Appium Doctor
- iOS 環境
- Xcode
- ios-deploy
- ideviceinstaller & libimobiledevice
- ios_webkit_debug_proxy
- Android 環境
- android-sdk
- platform-tools
- build-tools
- emulator
通用環境
Ⅰ 安裝 Homebrew
Homebrew是一個包管理軟件,它可以使我們更容易地安裝其他一些軟件,終端輸入安裝:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
如果安裝失敗(網速不行等。。),可以打開網址:https://raw.githubusercontent.com/Homebrew/install/master/install
將其內容保存爲homebrew.txt
(鏈接: 下載 提取碼: 8htr
),然後終端輸入:
/usr/bin/ruby homebrew.txt
此步驟還順帶安裝了Xcode命令行工具。
Ⅱ 安裝 Node & NPM
Node是一個javascript運行時環境,npm是節點包管理器。我們需要這些,因爲Appium是一個節點應用程序。在終端中,輸入以下命令(此命令也將安裝npm):
brew install node
Ⅲ 安裝 JDK
下載 Java jdk ,按步驟安裝,安裝完成後需要在.bash_profile
設置 JAVA_HOME
,設置之前你可以通過下邊的命令查看Java的安裝路徑,terminal輸入:
/usr/libexec/java_home --v
輸出路徑:
/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
通過vim
編輯.bash_profile
文件,終端輸入:
vim ~/.bash_profile
按 i
鍵進入編輯模式,移動到最下邊加入如下兩行(路徑爲之前查看的):
# [改爲你自己的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是一個依賴管理器,WebDriverAgent
需要它,終端輸入:
brew install carthage
Ⅴ 安裝 Appium
Appium(Version 1.15.1)是一個用於本地、混合和移動web應用程序的開源測試自動化框架。它使用WebDriver協議驅動iOS、Android和Windows mobile應用程序。終端安裝server版輸入:
# 安裝 server 版
npm install -g appium
默認安裝最新的版本,如果想安裝指定的版本:
npm install -g appium@1.7.2
卸載 Appium:
npm uninstall -g appium
npm cache clean --force
安裝桌面版(因爲桌面版方便元素定位),下載 相應的版本進行安裝(安裝兩種方式,方便使用)。
Ⅵ 安裝 Appium Doctor
Appium doctor是一個小型軟件,它檢查Appium成功運行的所有(幾乎所有)前提條件。終端輸入:
npm install -g appium-doctor
appium-doctor的輸出應該是這樣的:
IOS
Ⅶ 安裝Xcode和模擬器
啓動Mac應用程序商店並下載/安裝Xcode(Version 10.1)。安裝之後,啓動Xcode並選擇
Xcode > Preferences > Components
來安裝可能想要測試的模擬器。
如果已經安裝過xcode,appium-doctor提示未安裝,則運行命令即可:
sudo xcode-select -r
Tips
:
# 查看已啓動的模擬器udid
xcrun simctl list | grep '(Booted)'
# 列出所有設備,包括真機、模擬器、mac
instruments -s devices
#錄像
xrecord --quicktime --list
xrecord --quicktime --name="iPhone" --out="/Users/blah/video/iphone.mp4" --force
模擬器相關命令參考:這裏
Ⅷ 安裝 libimobiledevice & ideviceinstaller
libimobiledevice
是一個跨平臺的軟件庫,支持 iPhone®, iPod Touch®, iPad® and Apple TV® 等設備的通訊協議。不依賴任何已有的私有庫,不需要越獄。應用軟件可以通過這個開發包輕鬆訪問設備的文件系統、獲取設備信息,備份和恢復設備,管理 SpringBoard 圖標,管理已安裝應用,獲取通訊錄、日程、備註和書籤等信息,使用 libgpod 同步音樂和視頻。
ideviceinstaller
是一個與iOS設備的installation_proxy交互的工具,允許安裝、升級、卸載、存檔、還原和列舉已安裝或存檔的應用程序。此工具用於在真機上運行測試,默認是都安裝的。
brew install libimobiledevice --HEAD # 安裝最新的更新,支持 iOS 10
brew install ideviceinstaller # 僅在 iOS9工作
如果安裝時遇到: “invalid active developer path” 則運行:
xcode-select --install
sudo xcode-select -r
問題
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
如果遇到如上錯誤,則先卸載ideviceinstaller 和 libimobiledevice
(brew uninstall ideviceinstaller
,brew uninstall libimobiledevice
),然後再重安裝即可
Tips
:
-
獲取設備的udid
idevice_id --list # 略寫爲 -l 顯示當前所連接設備的 udid idevice_id -l # 顯示當前所連接的設備[udid],包括 usb、WiFi 連接 instruments -s devices # 列出設備包括模擬器、真機及 mac 電腦本身 ideviceinfo # 可以在返回的數據中找到 udid # 蘋果手機 safari打開網址http://fir.im/udid 就看到了
-
安裝應用
xxx.ipa爲應用在本地的路徑 ideviceinstaller -i apppath # 安裝apppath下的app ideviceinstaller -u [udid] -i [xxx.ipa] # 給指定連接的設備安裝應用
-
卸載應用
bundleId爲應用的包名 ideviceinstaller -u [udid] -U [bundleId] # 給指定連接的設備卸載應用
-
查看設備已安裝的應用
ideviceinstaller -l #列出手機上所有用戶安裝的app 運行某個app idevicedebug run 'APP_BUNDLE_ID' # 可以直接launch某個app,當然,這個app必須是你通過development證書build到手機上的纔行 ideviceinstaller -u [udid] -l # 指定設備,查看安裝的第三方應用 ideviceinstaller -u [udid] -l -o list_user # 指定設備,查看安裝的第三方應用 ideviceinstaller -u [udid] -l -o list_system # 指定設備,查看安裝的系統應用 ideviceinstaller -u [udid] -l -o list_all # 指定設備,查看安裝的系統應用和第三方應用
-
獲取設備信息
ideviceinfo -u [udid] # 指定設備,獲取設備信息 ideviceinfo -u [udid] -k DeviceName # 指定設備,獲取設備名稱:iPhone6s idevicename -u [udid] # 指定設備,獲取設備名稱:iPhone6s ideviceinfo -u [udid] -k ProductVersion # 指定設備,獲取設備版本:10.3.1 ideviceinfo -u [udid] -k ProductType # 指定設備,獲取設備類型:iPhone8,1 ideviceinfo -u [udid] -k ProductName # 指定設備,獲取設備系統名稱:iPhone OS
-
其他系統文件信息
idevicescreenshot # 截圖 ideviceinfo # 獲取設備所有信息 idevicesyslog # 獲取設備日誌 idevicecrashreport -e test # 獲取設備 crashlog,test 是文件夾需新建 idevicediagnostics restart # (shutdown、sleep)管理設備狀態 - 重啓、關機、睡眠等
Ⅸ 安裝 ios-deploy
ios-deploy
同樣是一個不需要用Xcode安裝和調試應用的命令行工具。需要一個有效的開發者證書,需要 Xcode 7以上的版本。終端輸入:
brew install ios-deploy
Tips
:
-
安裝應用
ios-deploy -c # 查看當前鏈接的設備,獲取udid # xxx.app爲 Xcode 編譯後的應用安裝包路徑 ios-deploy --id [udid] --bundle [xxx.app] # 給指定應用安裝應用
-
卸載應用
ios-deploy --id [udid] --uninstall_only --bundle_id [bundleId] # 給指定連接的設備卸載應用
-
查看設備已安裝的應用
ios-deploy --id [udid] --list_bundle_id # 查看設備安裝的所有應用,包括系統應用和第三方應用 ios-deploy --id [udid] --exists --bundle_id # 指定設備檢查指定應用是否已經安裝
Ⅹ 安裝 ios_webkit_debug_proxy
Appium使用ios_webkit_debug_proxy
這個工具在真機上訪問web view
。在終端中,運行以下命令:
brew install ios-webkit-debug-proxy
至此iOS環境搭建完畢!!!只適用於模擬器,真機的話還需要配置。
Ⅺ iOS真機手動配置
查看appium
的安裝位置,正常npm安裝的位置應該在/usr/local/bin/appium
下
which appium
# /usr/local/bin/appium
命令行安裝的appium一般安裝在/usr/local/bin/appium
下,WebDriverAgent
將會在路徑:/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
)下有沒有WebDriverAgent.xcodeproj
(有的話跳過下邊,直接用Xcode打開即可),沒有的話直接打開終端運行如下命令搭建項目:
cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/
mkdir -p Resources/WebDriverAgent.bundle
./Scripts/bootstrap.sh -d
然後用Xcode 打開 WebDriverAgent.xcodeproj
,在 “General” 下將 WebDriverAgentLib
和 WebDriverAgentRunner
設置成 “Automatically manage signing” 並在 “Team” 中選擇你的開發團隊 ;
Xcode可能無法爲WebDriverAgentRunner目標創建配置文件(Failed to create…)
這需要手動更改目標的bundle id
,方法是進入“Build Settings”選項,更改“Product bundle Identifier”的值使Xcode將接受,默認爲com.facebook.WebDriverAgentRunner
返回 “General” 選項,看到對於文件WebDriverAgentRunner
的配置文件已經創建成功了
最後,build
項目:
通過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
驗證是否安裝成功,確保手機和電腦連接同一個WiFi(同一局域網內):
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
將會看到類似的輸出:
{
"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
}
然後會看到真機上安裝了WebDriverAgentRunner
應用:
安裝成功後運行如果遇到這樣的錯誤:
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)
問題是該應用在設備上不受信任。如果你手動嘗試在設備上運行WebDriverAgent應用,你會看到一個彈出消息:
你可以通過Settings => General =>Device Management 來信任開發者並允WebDriverAgentRunner應用程序運行。
至此iOS真機運行環境配置完畢,你可以進行真機測試了~~
Tips:
真機運行必須添加這兩個參數:
{
# xcodeOrgId 類似:TEST INTERNATIONAL
"xcodeOrgId": "<Team ID>",
# xcodeSigningId是一個由Apple生成的唯一的10個字符的字符串,類似 6387P24J3L
"xcodeSigningId": "iPhone Developer"
}
這兩個字段獲取:
Android 環境
安裝Android環境可以使用直接使用 Android studio來安裝,但是會下載好多無用的東西,佔用內存。可以選擇下邊的Command line tools only
通過命令行安裝(命令行安裝可能會失敗,多試幾次就好)。這裏只介紹用命令行安裝的方法。
該方法會安裝在
/usr/local/Caskroom/android-sdk/4333796/
目錄下4333796
爲android-SDK的版本號
該目錄下要存在 tools、platform-tools、build-tools 三個文件夾,否則這個環境還是會存在問題的; 如果沒有,需要運行安裝、或移動 platform-tools 文件夾,可以將
/usr/local/Caskroom/android-platform-tools/29.0.5/ 目錄下的 platform-tools 文件夾複製過來
Ⅻ 安裝 android-sdk
終端運行:
brew cask install android-sdk
XIII 安裝 build-tools
sdkmanager --install "build-tools;29.0.2"
XIV 安裝 platform-tools
-
sdkmanager 安裝(
sdkmanager
詳細命令參考:這裏 )# 使用sdkmanager 安裝 sdkmanager --install "platform-tools" "platforms;android-29"
-
非 sdkmanager 安裝
# 如果上邊的失敗,則使用brew 安裝(此安裝完成後需要將platform-tools移 # 動到 /usr/local/Caskroom/android-sdk/4333796/ 下) brew cask install android-platform-tools # 安裝完成後移動 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
# 將會看到 tools、platform-tools、build-tools 三個文件夾
然後在在 ~/.bash_profile
中配置ANDROID_HOME
,終端輸入: vim ~/.bash_profile
,然後點擊i
鍵進入編輯模式,添加如下:
export ANDROID_HOME=/usr/local/Caskroom/android-sdk/4333796
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
然後運行:
source ~/.bash_profile
再次執行 appium-doctor 檢查 appium 環境,如下:
至此Android環境搭建完成了!!!真機可直接運行。
如果需要使用 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"
下一步創建模擬器:
avdmanager
詳細介紹參考:這裏
avdmanager create avd -n test -k "system-images;android-28;google_apis;x86" -b x86 -c 100M -d 7 -f
最後運行模擬器:
# test 爲上邊創建模擬器的名稱(-n test)
emulator -avd test
# 或者
emulator @test
Tips:
啓動時如果如報這個錯誤
PANIC: Missing emulator engine program for 'x86' CPU.
則說明不能使用tools下的emulator,直接選擇/usr/local/Caskroom/android-sdk/4333796/emulator/emulator @test
啓動嘗試(嘗試tools目錄下的emulator和emulator目錄下的哪個可以用哪個)
XVI 運行測試代碼
此處只簡單演示Python代碼,詳情參考:這裏
安裝Python版的客戶端:
pip install appium-python-client
如果提示:'pip: command not found'
,根據自己Python的版本運行命令(Python 3的話後邊改爲3):
brew install python@2
這樣安裝後運行python腳本需要使用:python2 test_android.py
運行test_android.py
腳本(測試計算器):
真機還是模擬器自行切換註釋代碼!!!
腳本下載
# 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()
運行test_ios.py
腳本(TestApp ):
應用於iOS模擬器!!!
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真機運行test_ios_real.py
腳本:
腳本下載:這裏,運行前確保build
進程存在(或者直接運行前執行該命令):
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('[email protected]')
password=self.driver.find_element_by_ios_predicate('type=="XCUIElementTypeSecureTextField"')
password.clear()
time.sleep(2)
password.send_keys('[email protected]')
password.send_keys('\n')
time.sleep(10)
if __name__ == '__main__':
unittest.main()
Tips:
# 查看設備名(deviceName)
adb devices
# 查看模擬器版本號(platformVersion)
adb shell getprop ro.build.version.release
# 查看appPackage、appActivity,運行命令時要確保打開了應用
# 例如:首先打開計算器,然後運行命令即可獲取到(以 / 隔開,前邊appPackage,後邊 appActivity )
# 如果是Windows,則把 grep 換成 findstr
adb shell dumpsys window windows | grep "Current"
# **********iOS************
# 安裝 app
xcrun simctl install booted /Users/XXXX/Downloads/TestApp.app/
# 獲取名稱和udid(先啓動模擬器,再運行命令)
xcrun simctl list | grep "(Booted)"
其他adb
相關命令查看:這裏
其他xcrun simctl
相關命令查看:這裏
XVII 問題解決
問題一
“.android/repositories.cfg could not be loaded.”
這個問題是因爲缺少repositories.cfg
文件,直接運行mkdir -p .android && touch ~/.android/repositories.cfg
即可
問題二
“PANIC: can`t find avd system path”
檢查SDK目錄是否有至less4個目錄: emulator , platforms , platform-tools , system-images
缺少哪個安裝哪個,安裝方法:
sdkmanager --install “emulator”
sdkmanager --install “platforms;android-26”
sdkmanager --install “system-images;android-26;google_apis;x86”
參考:這裏
問題三
“library not found at …/emulator/lib64/qt/lib”
需要用tools下的emulator啓動虛擬設備即可(嘗試tools目錄下的emulator和emulator目錄下的哪個可以)
問題四
“Original error: Could not find ‘adb’ in PATH”
這個問題首先確保ANDROID_HOME設置正確的話(使用server版啓動沒問題),啓動 Appium 桌面版引起的,因爲正常安裝後啓動需要在桌面版配置JAVA_HOME 和 ANDROID_HOME,配置後即可解決
問題五
“Original error: Error Domain=com.facebook.WebDriverAgent Code=1 “Keyboard is not present” UserInfo={NSLocalizedDescription=Keyboard is not present}” mac 跑模擬器的時候,當定位到了輸入框,但是無法輸入內容,會報如上到錯誤,這是由於模擬器的鍵盤沒有被彈出導致的
兩種解決方案:
一是 直接在 desired_caps 中添加"connectHardwareKeyboard":True
這一配置即可,配置參考:這裏
二是 打開APP,定位到輸入框,然後在鍵盤上用快捷鍵command+shift+k
,看到鍵盤彈出即可