环境搭建目录
前提环境
python
selenium
setuptools,pip
通用环境
Homebrew
Node & NPM
Carthage
Appium
Appium Doctor
iOS 环境
Xcode
ios-deploy
ideviceinstaller & libimobiledevice
ios_webkit_debug_proxy
一、前提环境配置
安装python
下载python进行安装https://www.python.org/,默认安装,安装好之后,打开终端,输入python,如提示不是内部命令,则将python安装目录添加到环境变量Path中。
安装setuptools,pip
下载setuptools,pip https://pypi.python.org/pypi/setuptools https://pypi.python.org/pypi/pip
打开cmd 进入setuptools解压目录,输入:python setup.py install 进入pip解压目录,输入:python setup.py install 安装好后,打开终端,输入pip,如提示不是内部命令,则将python安装目录下Scripts目录添加到环境变量Path中。
安装selenium
终端输入pip install Selenium安装最新版本的selenium。
pip install Selenium 如需安装指定的版本,则pip install Selenium==版本号。
pip install Selenium==版本号
二、通用环境配置
安装 Homebrew
Homebrew是一个包管理软件,它可以使我们更容易地安装其他一些软件,终端输入安装:
安装
MacBook-Air ~ % /bin/bash -c "(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
重新安装
MacBook-Air ~ % /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
检查homebrew是否安装
MacBook-Air ~ % brew -v
MacBook-Air ~ % brew list //查看已安装列表
MacBook-Air ~ % brew update //更新Homebrew
如果安装失败(网速不行等。。),可以打开网址:http://vip.ytesting.com/q.do?a&id=ff80808172521d8201726a74986f0880 将其内容保存为homebrew.txt,然后终端输入:
MacBook-Air ~ % /usr/bin/ruby homebrew.txt
注意:此步骤还顺带安装了Xcode命令行工具(xcode-commaindline-tools)。
安装 Node & NPM
Node是一个javascript运行时环境,npm是节点包管理器。我们需要这些,因为Appium是一个节点应用程序。在终端中,输入以下命令(此命令也将安装npm):
安装
MacBook-Air ~ % brew install node
查看node版本
MacBook-Air ~ % node -v
重新安装:
MacBook-Air ~ % brew reinstall node
默认的npm源再国内都很慢,安装好node之后需要重新配置一个国内源
MacBook-Air ~ % npm config set registry https://registry.npm.taobao.org/
MacBook-Air ~ % npm -v
安装 Carthage
Carthage是一个依赖管理器,类似于java的maven,WebDriverAgent需要它,终端输入:
安装carthage
MacBook-Air ~ % brew install carthage
更新carthage
MacBook-Air ~ % brew upgrade carthage
重新安装:
MacBook-Air ~ % brew reinstall carthage
安装完成后检查一下是否安装成功
MacBook-Air ~ % carthage version //打印出版本号即表示安装成功
如果安装
carthage
出现以下错误:Error: An unexpected error occurred during the
brew link
stepThe formula built, but is not symlinked into /usr/local
Permission denied @ dir_s_mkdir - /usr/local/Frameworks
Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks
原因是
carthage
已经安装,但是没有 link 到 brew,还有就是文件夹权限问题,在终端输入:MacBook-Air ~ % sudo mkdir /usr/local/Frameworks
MacBook-Air ~ % sudo chown $(whoami):admin /usr/local/Frameworks
MacBook-Air ~ % brew link carthage
安装 Appium(二选1)
Appium(Version 1.13)是一个用于本地、混合和移动web应用程序的开源测试自动化框架。它使用WebDriver协议驱动iOS、Android和Windows mobile应用程序。
方式1:安装桌面版 appium-server(推荐)
桌面版包含了appium-server,同时也包含一个元素定位器,建议安装桌面版。
进入官网下载
MacBook-Air ~ % git clone https://github.com/appium/appium-desktop.git
其他版本:进入官网下载1.17.1
方式2:安装 appium-server 版
1、安装 appium-server
终端安装server版输入:
MacBook-Air ~ % npm install -g appium
默认安装最新的版本,如果想安装指定的版本:
MacBook-Air ~ % npm install -g appium@1.7.2
卸载 Appium:
MacBook-Air ~ % npm uninstall -g appium
MacBook-Air ~ % npm cache clean --force
安装appium client
appium主站上给出的命令是npm install wd 这应该是老版本的安装方法:
MacBook-Air ~ % npm install wd # get appium client
MacBook-Air ~ % npm wd -v # 检查是否安装成功。
推荐下面的方法进行安装:
安装python-client
MacBook-Air ~ % git clone git@github.com:appium/python-client.git # 下载python-client
MacBook-Air ~ % cd python-client # 进入python-client目录
MacBook-Air ~ % python setup.py install # 安装python-client
安装成功:
Finished processing dependencies for Appium-Python-Client==0.30 # 表示安装成功,安装版本0.30
安装appium-doctor:
1、安装appium-doctor
终端运行appium-doctor检查appium安装是否成功
MacBook-Air ~ % npm install appium-doctor -g
MacBook-Air ~ % node your-appium-test.js
2、检查appium安装版本
appium doctor用来检查appium的是否成功安装。手动下载安装appium doctor的网址在:https://github.com/appium/appium-doctor
MacBook-Air ~ % appium -v # 安装完成之后输入appium -v,显示版本号表示appium server安装成功
3、启动appium服务
在终端输入appium &。输出下面的信息,则表示appium server启动成功了。
MacBook-Air ~ % appium &
[1] 965$ [Appium] Welcome to Appium v1.9.1
[Appium] Appium REST http interface listener started on 0.0.0.0:4723
在终端输入:appium-doctor --ios 检查 iOS环境环境
其中的 WARN(警告)不用管:
iOS自动化 必要 环境配置没有问题
配置jdk+Android SDK 环境配置--针对Android
查看所有 必要 配置环境是否成功
打开.bash_profile
MacBook-Air ~ % open .bash_profile
Setting PATH for SDK
export ANDROID_HOME=/Users/用户名/Library/Android/sdk
export PATH=PATH
export PATH=PATH
Setting PATH for Jdk
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-14.0.1.jdk/Contents/Home
export PATH=PATH
export CLASSPATH=.:JAVA_HOME/lib/tools.jar
export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
关闭保存后,更新.bash_profile
MacBook-Air ~ % source .bash_profile
在终端输入:appium-doctor --Android 检查 Android环境环境
安装完成后,终端输入appium-doctor 检测环境是否成功(查询结果显示❌表示没有配置,需要配置,查看需要设置的必要环境)。
安装appium-doctor,android方面的环境需要:
必选项—— ANDROID_HOME、JAVA_HOME、adb、android、emulator
其中的警告不用管
appium-doctor # 默认安装路径:/usr/local/lib/node_modules/appium/node_modules/
IOS自动化环境配置
安装Xcode和模拟器
启动Mac应用程序商店并下载/安装Xcode(Version 13.1)。安装之后,启动Xcode并选择 Xcode > Preferences > Components 来安装可能想要测试的模拟器。
安装Command Line Tools
默认是不会安装Command Line Tools的,Command Line Tools是在Xcode中的一款工具,可以在命令行中运行C程序。为了配置appium环境,我们需要安装Xcode Command Line Tools。
官网下载
下载完成后,双击已下载的 .dmg 进行安装
检验 Command Line Tools 是否安装成功
方法一:
MacBook-Air ~ % xcode-select --install # 查看是否安装
xcode-select: error: command line tools are already installed, use "Software Update" to install updates(错误:命令行工具已经安装,请使用“软件更新”安装更新)
方法二:打开Xcode,创建一个新的项目,在OSX下面选择Application,如果右侧出现Command line tool图标,表示已经安装成功。
方法三:打开XCode 新建工程,如果安装了,在新建窗口可以看到
安装完成后,在终端中输入以下命令来查看安装版本:
MacBook-Air ~ % xcodebuild -version
Xcode 11.6
如果已经安装过xcode,appium-doctor提示未安装,则运行命令即可:
MacBook-Air ~ % 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交互的工具,允许安装、升级、卸载、存档、还原和列举已安装或存档的app。此工具用于在真机上运行测试,默认是都安装的。
MacBook-Air ~ % brew install libimobiledevice --HEAD # 安装最新的更新
MacBook-Air ~ % brew reinstall libimobiledevice # 重新安装
MacBook-Air ~ % brew install ideviceinstaller # 用于查看bundleid
MacBook-Air ~ % brew reinstall ideviceinstaller # 重新安装
如果安装时遇到: “invalid active developer path” 则运行:
MacBook-Air ~ % xcode-select --install
MacBook-Air ~ % 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
MacBook-Air ~ % brew uninstall ideviceinstaller
MacBook-Air ~ % brew uninstall libimobiledevice
然后再重安装即可
安装 ios-deploy
ios-deploy
同样是一个不需要用Xcode安装和调试应用的命令行工具。需要一个有效的开发者证书,需要 Xcode 7以上的版本。终端输入命令进行安装:
MacBook-Air ~ % brew install ios-deploy # 安装命令
MacBook-Air ~ % brew reinstall ios-deploy # 重新安装
MacBook-Air ~ % brew upgrade ios-deploy # 更新命令
安装 ios_webkit_debug_proxy
Appium使用ios_webkit_debug_proxy这个工具在真机上访问web view。在终端中,运行以下命令:
MacBook-Air ~ % brew install ios-webkit-debug-proxy # 安装命令
MacBook-Air ~ % brew reinstall ios-webkit-debug-proxy # 重新安装
至此iOS环境搭建完毕!!!只适用于模拟器,真机的话还需要配置。
iOS真机调试环境配置
编译webagentrunner项目,安装到被测真实设备上
查看appium的安装位置,正常npm安装的位置应该在/usr/local/bin/appium下
MacBook-Air ~ % 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的路径是:ls /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent
命令行版
MacBook-Air ~ % cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/
桌面版
MacBook-Air ~ % cd /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent
首先查看路径(/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent
)下有没有WebDriverAgent.xcodeproj
(有的话跳过下边,直接用Xcode打开即可)
2)如果/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent 没有WebDriverAgent.xcodeproj存在,则打开终端运行如下命令搭建项目:
MacBook-Air ~ % cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/
MacBook-Air ~ % mkdir -p Resources/WebDriverAgent.bundle
MacBook-Air ~ % ./Scripts/bootstrap.sh -d
然后用Xcode 打开
WebDriverAgent.xcodeproj
,在 “Signing&Capabilities” 下将 WebDriverAgentLib
和 WebDriverAgentRunner
设置成 “Automatically manage signing” 并在 “Team” 中选择你的开发团队 ;新用户第一次需要创建Team团队
个人证书调试失败
Failed to register bundle identifier.
The app identifier "com.facebook.WebDriverAgentRunner" cannot be registered to your development team because it is not available. Change your bundle identifier to a unique string to try again.
需要手动更改目标的bundle id
,方法是进入“Build Settings”选项,更改“Product bundle Identifier”的值使Xcode将接受,默认为com.facebook.WebDriverAgentRunner
,你需要改成不一样的,如:io.automation.WebDriverAgentRunner
返回 “Signing&Capabilities” 选项,看到对于文件WebDriverAgentRunner的配置文件已经创建成功了
解决⚠️问题
真机测试
最后,build项目: 通过Xcode获取udid:
利用ios-deploy获取,其他参考上边的介绍
MacBook-Air ~ % ios-deploy -c
命令行进入到WDA项目目录
MacBook-Air ~ % cd /usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent
将WDA安装到被测手机上,并测试该应用
MacBook-Air ~ % xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=<测试机的udid>' test
报错:
error: No profiles for 'io.uitest.WebDriverAgentRunner.xctrunner' were found: Xcode couldn't find any iOS App Development provisioning profiles matching 'io.uitest.WebDriverAgentRunner.xctrunner'. Automatic signing is disabled and unable to generate a profile. To enable automatic signing, pass -allowProvisioningUpdates to xcodebuild. (in target 'WebDriverAgentRunner' from project 'WebDriverAgent')报这个错是因为没有接入相关的设备到MAC上,只要设备接入,并通过XCode菜单:Product->Destnation->"Select Devices"选中要连接的设备就行。
XCode:
Product->Destination->"Select your iphone"
Product->Scheme->"Select WebDriverAgentRunner"
Product -> Test
注意:运行Test之前,手机先解锁再通过USB线连接到电脑。
运行完"Test",如果遇到这个报错:
运行报错:
/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj User-supplied CFBundleIdentifier value 'com.facebook.wda.lib' in the Info.plist must be the same as the PRODUCT_BUNDLE_IDENTIFIER build setting value 'com.facebook.WebDriverAgentLib'.
解决方案:
运行报错:
/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingHTTPServer.h:16:9: 'CocoaAsyncSocket/GCDAsyncSocket.h' file not found
解决:进入appium-webdriveragent目录,重新执行:
MacBook-Air % cd /usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent
MacBook-Air appium-webdriveragent % sh ./Scripts/bootstrap.sh
再次执行Product -> Test,弹出密钥授权弹窗,输入密钥(多次输入密钥,直到弹窗消失)
最后报错:Command CodeSign failed with a nonzero exit code
解决方案---通过终端命令:MacBook-Air appium-webdriveragent % xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=000-000080E' test
执行中会弹出密钥弹窗,多次输入密钥,直到弹窗消失
最后机上可以看到一个没有图标的 WebDriverAgentRunner.app 应用,进入设置 -》通用 -》设备管理 -》点击 开发者app下面的证书 -》点击“第一个蓝色字体信任按钮” -》点击信任,再重新执行项目即可正常连接
xcode点击▶️直接运行:
再次报错:
/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj User-supplied CFBundleIdentifier value 'com.facebook.wda.runner' in the Info.plist must be the same as the PRODUCT_BUNDLE_IDENTIFIER build setting value 'io.uitest.WebDriverAgentRunner'.
解决方案:
最终看到这样输出就是成功了:
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 DEVICE_URL/status
直接在手机浏览器中输入这个地址http://127.0.0.1:8100/status返回一个json串即表明连接成功
安装成功后运行如果遇到这样的错误:
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)
至此iOS真机运行环境mac端配置完毕
手机端设置
进入设置,开发者选项,允许UIautomator
Tips:
真机运行务必添加这两个参数到capabilities:
{
#xcodeOrgId 类似:TEST INTERNATIONAL
"xcodeOrgId": "<Team ID>",
#xcodeSigningId 是一个由Apple生成的唯一的10个字符的字符串,类似 6387P24J3L
"xcodeSigningId": "iPhone Developer"
}
这两个字段获取方式:
xcodeOrgId
: 开发者组织代码,是一串唯一的10位随机字符串。查找方式:打开keychain,找到苹果开发者对应的证书,点进去,找到Organizational Unit这项,对应的字符串就是了
xcodeSigningId
:直接填 iPhone Developer
真机手动配置补充
udid就是设备唯一识别码了,查看方式参考上文,如果只连接了一台设备可以设置为auto
理想情况下,appium会自动注册并编译,但是如果有出现编译失败报错误码65的现象一般是由于找不到指定的开发者证书,需要我们手动配置一下,配置之后再手动编译一次,下次再运行的时候基本就可以了
第一次在手机构建webdriveragent应用时,xcode需要访问keychain以获取证书,输入当前mac用户的登录密码,然后点击 allow all
即可,如果连续弹出多次对话框就多次点击 allow all
附录
ios-deploy使用命令参考
安装应用
ios-deploy -c # 查看当前链接的设备,获取udid
xxx.app为 Xcode 编译后的应用安装包路径
ios-deploy --id [udid] --bundle [xxx.app] # 给指定设备安装应用,udid是苹果设备唯一识别码
卸载应用
ios-deploy --id [udid] --uninstall_only --bundle_id [bundleId] # 给指定连接的设备卸载应用
查看设备已安装的应用
ios-deploy --id [udid] --list_bundle_id # 查看设备安装的所有应用,包括系统应用和第三方应用
ios-deploy --id [udid] --exists --bundle_id # 指定设备检查指定应用是否已经安装
idevice命令用法参考
获取设备的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)管理设备状态 - 重启、关机、睡眠等
安装 JDK(android自动化)
下载 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=PATH
添加后按 Esc按键,输入:wq保存并退出编辑。输入使其生效(或重启终端):
添加后按 Esc按键,输入:wq保存并退出编辑。输入使其生效(或重启终端):
source ~/.bash_profile