有关 appium2.x的官方文档
共同安装
- 安装 python( 如果pycharm版本是 2019 的话,python版本最好小于 3.10)
1.安装 java(我的是 11) ,安装 jdk
2.安装homebrew / 安装git
3.安装 xcode(根据 macOS版本)
- 安装 node和npm
brew install node
brew install npm
- selenium和ChromeDriver安装
(1) 安装 selenium
pip3 install selenium
(2)安装chrome浏览器驱动
chromedriver与chrome最新版本对应表
(mac)无法打开“chromedriver”,因为无法验证开发者
(3)测试驱动是否正常,如果打开浏览器网页,则正常
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
一 . (android)前提:
1.安装android sdk
官网
将下载的 Android SDK 解压,将得到如下目录。(具体安装步骤可以阅读 SDK Readme.txt)
阅读 SDK Readme.txt文档得知:
In order to start developing applications, you must install the Platform-tools
and at least one version of the Android platform, using the SDK Manager.
安装platform-tools和至少一个Android platform
先cd到android-sdk-macosx文件夹下:
再输入命令:
tools/android update sdk --no-ui
安装完成
- 配置环境变量:(编辑及保存方法)
vim ./.bash_profile(或者vim ./.zshrc)--根据 shell类型。
进入到vim编辑器,添加以下部分
export ANDROID_HOME='/Users/mac/Documents/android-sdk-macosx'
export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
export AAPT_HOME=${PATH}:$ANDROID_HOME/build-tools/30.0.0-preview
export PATH=${AAPT_HOME}
保存: source ~/.bash_profile
或者保存:source ~/.zshrc
验证是否配置成功
adb version
- 安装 UiAutomator2 驱动程序
npm install appium-uiautomator2-driver
二 . (ios)前提
1.以下相当于 android 的 adb,是 Appium 底层用到的工具之一,用于获取 iOS 设备信息
(1)安装libimobiledevice.使用文档链接:https://zhuanlan.zhihu.com/p/347635173
brew install libimobiledevice --HEAD
brew reinstall libimobiledevice # 重新安装
(2)安装ideviceinstaller
主要用于获取设备udid、安装app、卸载app、获取bundleid
brew install ideviceinstaller # 用于查看bundleid
brew reinstall ideviceinstaller # 重新安装
更多 ideviceinstaller信息
2.安装carthage:类似于 java 的 maven,项目依赖管理,主要是 WebDriverAgent 使用
brew install carthage
如果要卸载
brew reinstall ideviceinstaller
3.安装ios-deploy:查看设备应用
ios-deploy 不依赖于XCODE,进行安装和调试IOS应用程序
npm install ios-deploy
brew install ios-deploy # 安装命令
brew reinstall ios-deploy # 重新安装
brew upgrade ios-deploy # 更新命令
常用命令如下:
ios-deploy -c # 查看当前链接的设备 ios-deploy --[xxx.app] # 安装APP ios-deploy --id [udid] --uninstall_only --bundle_id [bundleId] # 卸载应用 ios-deploy --id [udid] --list_bundle_id # 查看所有应用 ios-deploy --id [udid] --exists --bundle_id # 查看应用是否安装
4.安装ios_webkit_debug_proxy(选)
Appium使用ios_webkit_debug_proxy这个工具在真机上访问web view。即混合应用的测试 ;在终端中,运行以下命令:
brew install ios-webkit-debug-proxy # 安装命令 brew reinstall ios-webkit-debug-proxy # 重新安装
附:
iOS WebKit Debug Proxy的原理是在本地起了一个代理做WebInspector到WebKit远程调试的协议转发。
5.安装authroize-ios(选)
iOS 授权工具,主要用于模拟器中一些权限的授权;
sudo cnpm install -g authroze-iossudo authroze-ios
npm install -g authroze-iossudo authroze-ios sudo authroze-ios
6.安装Command Line Tools(正常安装了新版的xcode,都会安装Command Line Tools)
安装方法:
xcode-select --install
检验 Command Line Tools 是否安装成功
方法一:
方法二:
打开Xcode,创建一个新的项目,在OSX下面选择Application,如果右侧出现Command line tool图 标,表示已经安装成功。
方法三:
打开XCode 新建工程,如果安装了,在新建窗口可以看到
(3)安装完成后,在终端中输入以下命令来查看安装版本:
xcodebuild -version
附录:
xcrun simctl list | grep '(Booted)' # 查看已启动的模拟器udid instruments -s devices # 列出所有设备,包括真机、模拟器、mac
# 录像功能
xrecord --quicktime --list xrecord --quicktime --name="iPhone" --out="/Users/yong/video/iphone.mp4" --force
三 . appium安装
参考:ios appium安装
1. 安装Appium
如果已安装要更新(appium1.x升级到2.x版本)
sudo cnpm install -g appium@next
如果要卸载
npm uninstall -g appium
新安装:先用
npm -g install [email protected]/[email protected]
如果不行,再用以下安装
sudo cnpm -g install [email protected]/[email protected]
- 先安装cnpm,如果已安装,查看版本cnpm -v
安装:需要安装权限
sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
2.安装驱动
安装xcuitest驱动 和uiautomator2驱动
appium driver install uiautomator2 #安装最新版uiautomator驱动
appium driver install [email protected] #安装特定版本4.12.2的xcuitest驱动或者 4.11.1
appium driver install --source=npm appium-xcuitest-driver[@<version>] #从npm安装xcuitest驱动
appium driver install --source=local /Users/me/sources/appium-xcuitest-driver #安装本地的xcuitest驱动
appium driver install --source=github --package=appium-xcuitest-driver appium/appium-xcuitest-driver #安装来自github来源的xcuitest驱动
appium driver list --installed #查询已经安装的驱动
appium driver update xcuitest #更新升级驱动
appium driver uninstall xcuitest #卸载xcuitest驱动
appium driver install [email protected]
或者
npm install [email protected]
或者
sudo cnpm install [email protected]
3. (1)安装appium-doctor,安装Appium Client
appium-doctor用于验证appium环境是否OK(以下两者之一即可)
npm install appium-doctor
npm install -g appium-doctor
pip3 install Appium-Python-Client
安装指定版本
pip3 install Appium-Python-Client==2.8.0
(2) 安装Appium Desktop
访问地址https://github.com/appium/appium-desktop/releases/tag/v1.22.0选择下载
或者直接克隆
git clone https://github.com/appium/appium-inspector
查看位置/Users/mac/appium-inspector
(3) 验证appium环境
appium-doctor
如果报错:zsh: command not found: appium-doctor
可能是权限的问题,使用以下指令安装 appium-doctor
sudo cnpm install -g appium-doctor
如果报错
WARN AppiumDoctor ✖ apkanalyzer could NOT be found in /Users/mac/Documents/android-sdk-macosx!
安装commandlinetools
从Download Android Studio & App Tools - Android Developers 拉到下面找到仅限命令行工具
解压后存放到android-sdk-macosx下面(/Users/mac/Documents/android-sdk-macosx)
再次运行appium-doctor,还是有报错(不管了!)
4. 检查appium ios环境
appium-doctor --ios
执行结果中没有error即可
验证版本:
appium -v
- 启动appium
四 . 配置webdriveragent(连接ios真机设备)
- 进入appium的appium-webdriveragent
(1)安装目录
不同的版本路径各不相同
命令行的安装1.x路径
/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent
appium2.x版本
/Users/mac/.appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent
(2)重新下载最新的appium-WebDriverAgent,替换appium自带的WebDriverAgent
WebDriverAgent使用appium修改版,这样能满足iOS高版本测试需求
有三种获取方式:
- 获取后替换原来的WebDriverAgent
法1.直接克隆
git clone https://github.com/appium/WebDriverAgent
或者
git clone https://github.com/facebook/WebDriverAgent.git
克隆后一般在本地的位置是 /Users/mac/WebDriverAgent
法2.下载地址:https://github.com/appium/WebDriverAgent/releases/tag/v4.9.1
法3.网盘链接: https://pan.baidu.com/s/1vTczVLvLy9-USb1LuWkwrw?pwd=w7ee 提取码: w7ee
(3)进入WebDriverAgent路径,执行下面指令(有的版本不需要)
./Scripts/bootstrap.sh
2.使用xcode方式打开WebDriverAgent.xcodeproj文件
双击打开
如果提示权限问题,可以操作如下
a.修改xcode的权限 b.修改打开文件所在文件夹的权限(增加读写,且应用到包含的项目)
3. 配置webdriveragent信息
(1)在WebDdriverAgentLib->Signing & Capabilities 配置Team 和 Bundle Identifier
Team:需要认证一个apple ID 账号即可,bundle id 相当于一个App的唯一识别号,可以随意更改,只要确认不会有重复即可
(2) WebDdriverAgentLib-->Build settings 这里也需要更改bundle id
(3)在WebDdriverAgentRunner->Signing & Capabilities 配置Team 和 Bundle Identifier和上面一致即可
(4) WebDdriverAgentRunner-->Build settings 这里也需要更改bundle id
五 . 连接iOS设备
(1) 首先需要将Product的Scheme选择为:WebDriverAgentRunner
(2)这里需要将连接iOS设备的版本号填入此处
(3)连接设备后,Product的Destination下可以看到连接的设备
a . 如果提示Unsupported OS version或者could not locate device support files或者faile to prepare the device for development
下载DeviceSupport 。放到目录
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
各版本 DeviceSupport 下载地址1 下载地址 2 下载地址 3 下载地址 4
如果还不行的话,添加后,可以配置Deployment Target
b . 如果提示Developer Mode DIsabled,表示设备的开发者模式没有打开
IOS开发之——Developer Mode DIsabled
(4) iproxy是usbmuxd附带的一个小工具,它的作用是将设备的某个端口映射到电脑的某个端口。
mac下可以通过brew安装
brew install usbmuxd
iproxy 8100 8100 意思就是将手机的8100端口,映射到电脑的8100端口上。这样我们就能通过访问电脑的8100端口来访问到手机了。
或者安装 tidevice
pip3 install -U tidevice
步骤参考:iOS真机安装WebDriverAgent图文详解-腾讯云开发者社区-腾讯云
(5)构建WebDriverAgentRunner,点击product ->Test方式运行
(6)第一次进行构建后,会报如下错误,需要在连接的ios设备中:设置->通用->描述文件与设备管理->信任当前的开发者APP(WebDriverAgent),然后再重新Test即可
如果再次报错:Lost connection to DTServiceHub
可能手机连接掉线了,确认设备连接正常
(7)编译构建成功:Build Succeeded
一切正常的话,手机/模拟器上会出现一个无图标的 WebDriverAgent 应用,启动之后,马上又返回到桌面
控制台输出:
(8)启动代理(这只是为了查看设备信息,查看后,记得关闭终端窗口后再运行脚本)
终端运行命令
iproxy 8100 8100
或者
tidevice relay 8100 8100
有些国产的iPhone机器通过手机的IP和端口还不能访问,此时需要将手机的端口转发到Mac上。
将手机的8100端口,映射到电脑的8100端口上。这样我们就能通过访问电脑的8100端口来访问到手机了。
(9)查看iOS设备连接状态
浏览器输入url:http://127.0.0.1:8100/status
http://127.0.0.1:8100/inspector
可以查看图层
(10)通过AirtestIDE连接设备(应用安装)。该步骤也可不操作,不影响!!!
(11)ios设备端的“设置”--“开发者”,记得打开UI Automation
六 . 开启(ios)自动化脚本调试
有关设备信息的常用命令如下:
查看当前所连接的设备
idevice_id -l # 显示当前所连接设备的 udid
instruments -s devices # 列出所有设备,包括真机、模拟器、mac
安装应用
ideviceinstaller -u [udid] -i [xxx.ipa] # xxx.ipa 为应用在本地的路径
卸载应用
ideviceinstaller -u [udid] -U [bundleId]
查看设备已安装的应用
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 # 获取设备名称 同命令
idevicenameidevicename # 同上
ideviceinfo -u [udid] -k ProductVersion # 获取设备版本 10.3.3
ideviceinfo -u [udid] -k ProductType # 获取设备类型 iPhone 8,1
ideviceinfo -u [udid] -k ProductName # 获取设备系统名称
查看手机实时日志
idevicesyslog #屏幕上即可看见手机上所有的日志
idevicesyslog >> iphone.log & #重定向日志到文件中
获取手机端崩溃报告
idevicecrashreport # 参数可设置具体文件存放位置
截屏
idevicescreenshot #获取当前截屏,效率比appium截屏高10倍
其他系统文件信息
ideviceinfo # 获取设备所有信息
idevicesyslog # 获取设备日志
idevicecrashreport -e test # 获取设备
crashlog,test 是文件夹需新建
idevicediagnostics # 管理设备状态 - 重启、关机、睡眠等
重启
idevicediagnostics restart
作为测试,我选择的是学科网ipa(也可以选择其他的应用ipa,法一 ,法二,用Apple Configurator下载)
步骤一:学科网ipa下载
链接: https://pan.baidu.com/s/16IhnLi1Yff6JKMTfVALh9Q?pwd=5njf 提取码: 5njf
步骤二:签名(我用的是爱思助手)
- 获取IOS设备的UDID
idevice_id
- 获取APP的bundleId,类似于Android端应用程序的包名
ideviceinstaller --list-apps | grep 关键字
- 配置iOS设备参数(安装IDE,我安装的是pycharm)
各参数
(1)以下是在 ios真机上运行:
"xcodeOrgId": "<Team ID>", # xcodeOrgld是一个由Apple生成的唯一的10个字符的字符串,类似 6387P24J3L
"xcodeSigningId": "iPhone Developer"
- 执行脚本,成功打开被测APP
appium自动开启和关闭(win/mac)
运行脚本
(1)脚本内含有启动appium代码
appium -a 127.0.0.1 -p 4723
启动webdirveragent服务的命令变化:
- appium2.0是:appium -p {port} --driver-xcuitest-webdriveragent-port {agent_port}
- appium1.x是:appium -p {port} --webdriveragent-port {agent_port}
port是appium服务器的端口号,–webdriveragent-port 就是webdriveragent的端口转发的指定端口,在iOS端上的webdriveragent启动服务后默认是手机ip:8100
(2)连接服务器配置:
appium1.x
webdriver.Remote(http://127.0.0.1:4723/wd/hub)
appium2.x
webdriver.Remote(http://127.0.0.1:4723)
该步骤常见报错:
(1)如果报错TypeError: init() got an unexpected keyword argument 'desired_capabilities'
(2)如果运行时报错:提示 /bin/sh: appium: command not found(终端运行appium正常)
PyCharm 中执行命令提示 command not found
(3)如果报错
selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Could not load a driver for automationName 'xcuitest' and platformName 'ios'. Please verify your Appium installation
查找了各种情况,可以保证安装和配置都没有问题,最后问题竟然出现在下面设置的网址上。。。
webdriver.Remote(command_executor='http://127.0.0.1:4723/wd/hub', options=option)
改为
webdriver.Remote(command_executor='http://127.0.0.1:4723', options=option) # 2.x
==============================
运行后成功!!!!!!!!!!!!且自动启动应用!!!!!!
七 . 完整的启动应用代码(ios真机)
# coding=utf-8
import unittest
import warnings
from appium import webdriver
import time
# import os
import subprocess
# import sys
# from appium.options.common import AppiumOptions
from appium.options.ios import XCUITestOptions
class IosSimpleTest(unittest.TestCase):
def setUp(self):
# sys.path.append('/usr/local/bin/appium')
# print('\n'.join((sys.path)))
warnings.simplefilter('ignore', ResourceWarning)
# appium_cmd = 'appium -a 127.0.0.1 -p 4723 --webdriveragent-port 8100' # 1.x
# appium_cmd = 'appium -a 127.0.0.1 -p 4723 --driver-xcuitest-webdriveragent-port 8100' # 2.x
appium_cmd = 'appium -a 127.0.0.1 -p 4723'
# os.system('appium -a 127.0.0.1 -p 4723')
process = subprocess.Popen(appium_cmd, shell=True)
print("Appium服务已经启动,进程ID为:", process.pid) # 进程ID
time.sleep(10) # 等待appium启动
options = XCUITestOptions()
options.load_capabilities({
'platformName': 'iOS',
'deviceName': 'iPhone 6 Plus',
'platformVersion': '12.5',
'antomationName': 'XCUITest',
# 'app': '/Users/mac/Documents/ipa/xkw_3.0.13.ipa', # 安装包路径。用app安装以后,不更新应用的话就可以不再执行该指令
'bundleId': 'com.xkw.client.63FQ8475MG', # 第一次用 app安装用应用以后,就可以用bundleId进行识别
'udid': '13e29c07168273224cb5f9b3ca972c8a4612f52a',
'xcodeOrgId': '73****R9U9',
'xcodeSigningId': 'iPhone Developer',
# 'useNewWDA': True, # 只在第1次搭建环境时运行即可,以后运行自动化脚本,就会直接启动WebDriverAgent
'noReset': True
})
self.driver = webdriver.Remote(
'http://127.0.0.1:4723',
options=options,
direct_connection=True
)
def tearDown(self):
# self.driver.quit()
end_cmd = 'killall -9 node'
subprocess.Popen(end_cmd, shell=True)
def test001(self):
time.sleep(2)
# self.a == 1
print("ceshi")
if __name__ == '__main__':
unittest.main()
备注:
通常来说为了持续集成,自动化会比较好一些,我们不必每次都通过这种方式来启动xcode、WebDriverAgent,这种方式只在第1次搭建环境时运行即可,我们可以在自动化脚本中加入如下代码,这样只要在以后启动appium后,运行自动化脚本,就会直接启动WebDriverAgent
desiredCapabilities.setCapability(“useNewWDA”, true);
如果xcode在先启动wda,而代码中又用此行代码,运行时xcode中会显示执行失败,报 出冲突的错误哦,所以后期只在代码中启动WebDriverAgent即可,不再需要用xcode启动
每次测试应用都需要启动 WebDriverAgent , 修改使用脚本方式自动运行
# 解锁keychain,以便可以正常的签名应用,
PASSWORD="YourPassword"
security unlock-keychain -p $PASSWORD ~/Library/Keychains/login.keychain
# 获取设备的UDID,用到了之前的 libimobiledevice
UDID=$(idevice_id -l | head -n1)
# 真机运行测试
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=$UDID" test
# 模拟器运行测试
#xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "platform=iOS Simulator,name=iPhone X" test
八 . 查看ios/android设备列表
- 查看设备列表(Android):
adb devices
- 查看设备列表(iOS):使用Xcode中的Windows-“Devices and Simulators”窗口
查看设备名(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)"
mac端口占用情况
lsof -i :8080
8080 为端口
mac杀进程
killall -9 node
九 . ios真机和虚拟机的区别
ios 真机:
1)可以运行.ipa包和.app包;
2).app包必须是在真机环境下编译才可在真机运行;
ios simulator:
1)只能运行.app包;
2).app包必须是在simulator环境下编译才可在simulator运行;
版权归原作者 may_一一 所有, 如有侵权,请联系我们删除。