appium环境配置

windows配置

Mac配置

安装Java

官网下载 Java,下载对应版本安装,完成后配置环境变量vi ~/.bash_profile,如果安装了zsh操作vi ~/.zshrc

JAVA_HOME=`/usr/libexec/java_home`
export JAVA_HOME

保存后 source ~/.bash_profile
终端输入java -version出现安装版本号等信息,表示配置正确

java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

安装appium

下载appium,建议安装appium-desktop版本,以支持iOS 9.0+系统测试;官方下载地址,dmg安装包直接安装。

配置Android开发环境

简洁的办法通过安装Android studio安装,官网下载安装Android Studio,安装完成后打开Android studio,按照引导下载安装Android sdk,

image.png
进入到此页面表示安装完成,下一步配置Android_home环境变量

export ANDROID_HOME=/Users/修改为自己的用户名/Library/Android/sdk
export PATH=${PATH}:${ANDROID_HOME}/tools
export PATH=${PATH}:${ANDROID_HOME}/platform-tools

配置完成后 source ~/.bash_profile
终端adb命令可用表示,Android环境配置完成

Xcode安装

App Store安装Xcode 9.1以上版本

配置iOS真机测试环境

为了可以支持测试机9.0以上系统,环境要求Xcode8+ MAC系统10.11+

  • 安装Xcode
    安装Xcode 8+版本,App Store直接可以下载安装9.1,其他版本到https://developer.apple.com/xcode/查找下载。
    如果有其他需要可以安装多个版本Xcode,具体方法:
    下载不同版本xcode,重命名不同的名字安装,
    切换不同版本的xcode,
    sudo xcode-select -switch /Applications/Xcode***.app
    gcc --version可以查看当前Xcode版本

  • 安装相关的依赖
    没有安装brew 官网方式/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"安装brew
    brew install carthage
    brew install libimobiledevice --HEAD
    brew install ideviceinstaller

穿插一下ideviceinstaller的用法
ideviceinstaller -l 列出安装应用列表
ideviceinstaller -i ~/****/Im.ipa 安装应用
ideviceinstaller -U com.Im.Im 卸载应用
idevicescreenshot 截图到当前目录
如果有报错Could not connect to lockdownd, error code -21的问题
可以通过sudo chmod -R 777 /var/db/lockdown解决,
or 前者操作问题未解决可以如下操作

brew uninstall ideviceinstaller
brew uninstall libimobiledevice
brew install --HEAD libimobiledevice
brew link --overwrite libimobiledevice
brew install ideviceinstaller
brew link --overwrite ideviceinstaller
  • 配置WebDriverAgent
    在appium目录/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/下找到WebDriverAgent,因为WebDriverAgent需提前编译运行通过才能使用,先将此文件夹移除,git clone https://github.com/facebook/WebDriverAgent.git到此目录,双击WebDriverAgent.xcodeproj通过Xcode编译运行wda
    打开项目后设置以下内容:
    通过Preference->Accounts添加apple ID个人账号即可,下载证书;
    image.png
image.png

设置Bundle Identifier 设置一个复杂的名称避免被别人使用过


image.png
image.png

终端进入项目(WebDriverAgent)目录,分别执行
mkdir -p Resources/WebDriverAgent.bundle
./Scripts/bootstrap.sh -d
./Scripts/bootstrap.sh
没有报错继续往下走,如有问题,需按具体问题查对应的解决办法。
常遇到的一个报错如下:

ERROR in ./js/app.js
Module parse failed: /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/js/app.js Unexpected token (67:6)
You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected token (67:6)
    at Parser.pp$4.raise (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:2221:15)
    at Parser.pp.unexpected (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:603:10)
    at Parser.pp$3.parseExprAtom (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1822:12)
    at Parser.pp$3.parseExprSubscripts (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1715:21)
    at Parser.pp$3.parseMaybeUnary (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1692:19)
    at Parser.pp$3.parseExprOps (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1637:21)
    at Parser.pp$3.parseMaybeConditional (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1620:21)
    at Parser.pp$3.parseMaybeAssign (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1597:21)
    at Parser.pp$3.parseParenAndDistinguishExpression (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1861:32)
    at Parser.pp$3.parseExprAtom (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1796:19)
    at Parser.pp$3.parseExprSubscripts (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1715:21)
    at Parser.pp$3.parseMaybeUnary (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1692:19)
    at Parser.pp$3.parseExprOps (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1637:21)
    at Parser.pp$3.parseMaybeConditional (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1620:21)
    at Parser.pp$3.parseMaybeAssign (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1597:21)
    at Parser.pp$3.parseExpression (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1573:21)
    at Parser.pp$1.parseReturnStatement (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:839:33)
    at Parser.pp$1.parseStatement (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:699:34)
    at Parser.pp$1.parseBlock (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:981:25)
    at Parser.pp$3.parseFunctionBody (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:2105:24)
    at Parser.pp$3.parseMethod (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:2075:10)
    at Parser.pp$1.parseClassMethod (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1137:25)
    at Parser.pp$1.parseClass (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1118:14)
    at Parser.pp$1.parseStatement (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:697:19)
    at Parser.pp$1.parseTopLevel (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:638:25)
    at Parser.parse (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:516:17)
    at Object.parse (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:3098:39)
    at Parser.parse (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/lib/Parser.js:902:15)
    at NormalModule.<anonymous> (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/lib/NormalModule.js:104:16)
    at NormalModule.onModuleBuild (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack-core/lib/NormalModuleMixin.js:310:10)
 @ multi main
Done

解决办法:
修改vi /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/webpack.config.js文件

module: {
    loaders: [
      // { test: /\.js?$/, loaders: ['babel-loader'], exclude: /node_modules/ }, //修改此行 删除', exclude: /node_modules/'
      { test: /\.js?$/, loaders: ['babel-loader'] },
      { test: /\.css?$/, loader: 'style-loader!css-loader' },
    ]
  },

解决问题直到./Scripts/bootstrap.sh 没有报错信息
USB连接iOS真机,获取设备udid,idevice_id -l可以获取到或者通过iTunes拿到;
编译WebDriverAgent,进入到项目目录
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=替换获取到的udid' test
第一次运行会报错,需要打开手机设置-通用-设备管理(描述文件)验证apple id,验证通过后再次执行

Test Suite 'All tests' started at 2018-07-15 17:49:16.142
Test Suite 'WebDriverAgentRunner.xctest' started at 2018-07-15 17:49:16.143
Test Suite 'UITestingUITests' started at 2018-07-15 17:49:16.143
Test Case '-[UITestingUITests testRunner]' started.
    t =     0.00s Start Test at 2018-07-15 17:49:16.145
    t =     0.00s Set Up
2018-07-15 17:49:16.160133+0800 WebDriverAgentRunner-Runner[3707:502461] Built at Jul 15 2018 17:41:42
2018-07-15 17:49:16.201221+0800 WebDriverAgentRunner-Runner[3707:502461] ServerURLHere->http://10.154.23.100:8100<-ServerURLHere

表示WebDriverAgent编译启动通过。
WebDriverAgent也可以通过Xcode编译运行(过程略)

appium 开发环境可以到github下载源码,可以参考https://testerhome.com/topics/2037这篇帖子。

安装appium client

appium是一个web接口,他接受http请求,各个语言都可以自己封装发送请求与appium server进行交互进而操作测试机进行测试
官方对应各个语言的client 选择自己所用语言的client进入到GitHub页面,点击选择release标签下载安装包安装。

启动appium server 进行测试

  • Android
    可以通过appium ui的界面启动server 也可以通过命令去启动,
    node /Applications/Appium.app/Contents/Resources/app/node_modules/appium/build/lib/main.js --no-reset -U device_id
    具体对应的参数意义可以查看官方的说明
    默认监听端口4723 appium通信端口4724(android)
    启动server后,测试启动Android app参数示例:
desired_caps['unicodeKeyboard'] = True
    desired_caps['resetKeyboard'] = True # 设置用appium的输入法
    desired_caps['newCommandTimeout'] = 240
    desired_caps['platformName'] = 'android'  # 测试平台
    desired_caps['appPackage'] = 'Im.chen'
    desired_caps['appActivity'] = 'com.Im.StartFlashActivity'
    desired_caps['version'] = '7.0'  # 系统版本
    desired_caps['deviceName'] = 'deviceid' # 测试机设备号
    desired_caps['app'] = '/path/pro.Im.apk'  # 被测的apk的位置
    
    self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
  • iOS
  1. 需启动appium server node /Applications/Appium.app/Contents/Resources/app/node_modules/appium/build/lib/main.js --no-reset -U udid
  2. 启动WebDriverAgent
    xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=udid' test 启好后,需要转发8100端口iproxy 8100 8100,完成后浏览器访问http://localhost:8100/status得到json数据表示ok
    image.png

准备工作完成后,测试iOS应用参数示例:

desired_caps={}
    desired_caps['automationName'] = 'XCUITest'
    desired_caps['userable'] = 'yes'
    desired_caps['enabel'] = 'yes'
    desired_caps['newCommandTimeout'] = 20000
    desired_caps['platformName'] = 'ios'
    desired_caps['platformVersion'] = '10.3.3'
    desired_caps['deviceName'] = 'iPhone 6s'
    desired_caps['bundleId'] = 'com.Im.Im' 
    desired_caps['udid'] = 'udid'
    desired_caps['xcodeOrgId'] = '******' 
    # 这个参数可以在Xcode上获取,也可以在启动WebDriverAgent后找到应用的内容
    desired_caps['webDriverAgentUrl'] = "http://localhost:8100"
    desired_caps['app'] = "/path/"
    self.driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,442评论 25 707
  • 注:appium安装到C盘,node.js安装到C盘一、安装node.js1、到官网下载node.js:https...
    茶小汐阅读 513评论 1 11
  • 第一章 Appium环境配置(windows)一.Java环境配置二.Android环境配置三.Appium服务配...
    Shirley崔阅读 329评论 0 1
  • 林敬言 原呼啸队长 原霸图队员 现退役 原角色唐三打 现角色冷暗雷 林敬言 是几个大神级选手里 少有的 没有得到过...
    凡天星宇阅读 899评论 0 2
  • 是不是一堆人在排着队骂了,我熬夜是为了工作,工作一天加班到半夜,你还说我昨晚熬的夜没有意义? 许多人把熬夜当成一种...
    就看看wechat阅读 372评论 0 0