Appium-Server 与Appium-Desktop 的区别
Appium-Server的配置,在之前的博⽂已有介绍,,所以在此处就不详细介绍了。今天主要来分享下Appium-Server和Appium desktop在使⽤上的区别。在这篇博⽂中分享了如何使⽤模拟器,,但还没分享如何使代码正常运⾏起来,接下来详细说明。在谈起代码时,就需要先了解下appium的关键字
Appium 服务关键字
Android 特有关键字
描述
实例
automationName 你想使⽤的⾃动化测试引擎Appium (默认) 或 Selendroid platformName 你要测试的⼿机操作系统iOS, Android, 或 FirefoxOS platformVersion
⼿机操作系统版本
例如: 7.1, 4.4
deviceName 使⽤的⼿机类型或模拟器类型
iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4, 等。在 iOS 上,这个关键字的值必须是使⽤ instruments -s devices 得到的可使⽤的设备名称之⼀。在Android 上,这个关键字⽬前不起作⽤。
app
.ipa or .apk ⽂件所在的本地绝对路径或者远程路径,也可以是⼀个包括两者之⼀的.zip 。 Appium 会先尝试安装路径对应的应⽤在适当的真机或模拟器上。针对Android 系统,如果你指定app-package 和app-activity(具体见下⾯)的话,那么就可以不指定app 。 会与 browserName 冲突
⽐
如/abs/path/to/my.apk 或myapp/app.ipa browserName 需要进⾏⾃动化测试的⼿机 web 浏览器名称。如果是对应⽤进⾏⾃动化测试,这个关键字的值应为空。
iOS 系统上可以⽤ 'Safari' ,Android 系统上可以⽤'Chrome', 'Chromium', 或 'Browser'。newCommandTimeout 设置命令超时时间,单位:秒。达到超时时间仍未接收到新的命令时 Appium 会假设客户端退出然后⾃动结束会话。⽐如 60autoLaunch Appium 是否需要⾃动安装和启动应⽤。默
认值true
true, false language (Sim/Emu-only) 设定模拟器 ( simulator / emulator ) 的语⾔。如: fr locale (Sim/Emu-only) 设定模拟器 ( simulator / emulator ) 的区域设置。
如: fr_CA
udid 连接的物理设备的唯⼀设备标识
如: 1ae203187fc012g
orientation (Sim/Emu-only) 在⼀个设定的⽅向模式中开始测试LANDSCAPE (横向) 或 PORTRAIT (纵向)autoWebview 直接转换到 WebView 上下⽂。 默认值 false 、true, false noReset 不要在会话前重置应⽤状态。默认值false 。
true, false fullReset (iOS) 删除整个模拟器⽬录。(Android) 通过卸载——⽽不是清空数据——来重置应⽤状态。在 Android 上,这也会在会话结束后⾃动清除被测应⽤。默认值 false
true, false
关键字
描述
实例
appActivity 你要从你的应⽤包中启动的 Android Activity 名称。它通常需要在前⾯添加 . (如:使⽤.MainActivity ⽽不是 MainActivity)
MainActivity, .Settings
appPackage 你想运⾏的Android 应⽤的包名⽐如App, com.android.settings appWaitActivity 你想要等待启动的 Android Activity 名称SplashActivity deviceReadyTimeout 设置等待⼀个模拟器或真机准备就绪的超时时间5
androidCoverage
⽤于执⾏测试的 instrumentation 类。作为命令 adb shell am instrument -e coverage true -w 的-w 参数。
(仅适⽤于 Chrome 和 webview) 开启 Chromedriver 的性能⽇志。 (默认 false)
true, false
androidDeviceReadyTimeout 等待设备在启动应⽤后准备就绪的超时时间。以秒为单位。如 30
androidDeviceSocket 开发⼯具的 socket 名称。只有在被测应⽤是⼀个使⽤Chromium 内核的浏览器时需要。 socket 会被浏览器打开,然后 Chromedriver 把它作为开发者⼯具来进⾏连接。如 chrome_devtools_remote
avd
需要启动的 AVD (安卓虚拟设备) 名称。
android模拟点击如 api19
iOS 特有avdLaunchTimeout 以毫秒为单位,等待 AVD 启动并连接到 ADB 的超时时间。(默认值120000)
300000avdReadyTimeout 以毫秒为单位,等待 AVD 完成启动动画的超时时间。(默认值 120000)
300000avdArgs 启动 AVD 时需要加⼊的额外的参数。
如 -netfast useKeystore 使⽤⼀个⾃定义的 keystore 来对 apk 进⾏重签名。默认值 false
true or false keystorePath ⾃定义 keystore 的路径。默认:~/.android/debug.keystore 如 /path/to.keystore keystorePassword ⾃定义 keystore 的密码。如 123456
keyAlias key 的别名如 androiddebugkey keyPassword
key 的密码
如 123456
chromedriverExecutable webdriver 可执⾏⽂件的绝对路径 (如果 Chromium 核⼼提供了对应的 webdriver , 应该⽤它代替 Appium ⾃带的webdriver)
/abs/path/to/webdriver
autoWebviewTimeout 以毫秒为单位,等待 Webview 上下⽂激活的时间。默认值 2000
如 4
intentAction ⽤于启动 activity 的 intent action 。 (默认值android.intent.action.MAIN)
如 android.intent.action.MAIN,android.intent.action.VIEW
intentCategory ⽤于启动 activity 的 intent category 。 (默认值android.intent.category.LAUNCHER)
如 android.intent.category.LAUNCHER,android.intent.category.APP_CONTACTS intentFlags
⽤于启动 activity 的标识 ( flags ) (默认值 0x10200000)如 0x10200000
optionalIntentArguments
⽤于启动 activity 的额外 intent 参数
如 --esn <EXTRA_KEY>, --ez <EXTRA_KEY><EXTRA_BOOLEAN_VALUE>
stopAppOnReset 在使⽤ adb 启动应⽤前停⽌被测应⽤的进程 ( process ) 。如果被测应⽤是被另⼀个应⽤创建的,当这个参数被设定为false 时,允许另⼀个应⽤的进程在使⽤ adb 启动被测应⽤时继续存活。默认值 true
true 或 false
unicodeKeyboard 使⽤ Unicode 输⼊法。默认值false
true 或 false
resetKeyboard 在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重置输⼊法到原有状态。如果单独使⽤,将会被忽略。默认值 false
true 或 false
noSign 跳过检查和对应⽤进⾏ debug 签名的步骤。只能在使⽤UiAutomator 时使⽤,使⽤ selendroid 是不⾏。默认值 false
true 或 false
ignoreUnimportantViews 调⽤ uiautomator 的函
数setCompressedLayoutHierarchy()。由于 Accessibility 命令在忽略部分元素的情况下执⾏速度会加快,这个关键字能加快测试执⾏的速度。被忽略的元素将不能够被到,因此这个关键字同时也被实现成可以随时改变的 *设置 ( settings ) * 。默认值 false
true 或 false
关键字
描述
实例
calendarFormat (Sim-only) 为iOS 的模拟器设置⽇历格式
如 gregorian (公历)bundleId 被测应⽤的 bundle ID 。⽤于在真实设备中启动测试,也⽤于使⽤其他需要 bundle ID 的关键字启动测试。在使⽤ bundle ID 在真实设备上执⾏测试时,你可以不提供 app 关键字,但你必须提供 udid 。如 io.appium.TestApp
udid
连接的真实设备的唯⼀设备编号 ( Unique device identifier )
如 1ae203187fc012g launchTimeout
以毫秒为单位,在 Appium 运⾏失败之前设置⼀个等待 instruments 的时间
⽐如: 20000locationServicesEnabled
(Sim-only) 强制打开或关闭定位服务。默认值是保持当前模拟器的设定
true 或 false
locationServicesAuthorized (Sim-only) 通过修改 plist ⽂件设定是否允许应⽤使⽤定位服务,从⽽避免定位服务的警告出现。默认值是保持当前模拟器的设定。请注意在使⽤这个关键字时,你同时需要使⽤ bundleId 关键字来发送你的应⽤的 bundle ID 。
true 或者 false
autoAcceptAlerts 当 iOS 的个⼈信息访问警告 (如 位置、联系⼈、图⽚) 出现时,⾃动选择接受( Accept )。默认值 false 。
true 或者 false autoDismissAlerts
当 iOS 的个⼈信息访问警告 (如 位置、联系⼈、图⽚) 出现时,⾃动选择不接受( Dismiss )。默认值false 。
true 或者 false
Appium-Server
了解了appium的关键字,再来看代码⾥⾯的参数,⽰例如下:
参数定位
代码⽰例如下:
择不接受( Dismiss )。默认值false 。
nativeInstrumentsLib 使⽤原⽣ intruments 库 (即关闭 instruments-without-delay )
true 或者 false nativeWebTap (Sim-only) 在Safari 中允许"真实的",⾮基于 javascript 的 web 点击(tap) 。 默认值: false 。注意:取决于 viewport ⼤⼩/⽐例, 点击操作不⼀定能精确地点中对应的元素。
true 或者 false
safariInitialUrl (Sim-only) (>= 8.1) 初始化 safari 的时使⽤的地址。默认是⼀个本地的欢迎页⾯
如www.github safariAllowPopups (Sim-only) 允许 javascript 在 Safari 中创建新窗⼝。默认保持模拟器当前设置。
true 或者 false safariIgnoreFraudWarning (Sim-only) 阻⽌ Safari 显⽰此⽹站可能存在风险的警告。默认保持浏览器当前设置。
true 或者 false safariOpenLinksInBackground (Sim-only) Safari 是否允许链接在新窗⼝打开。默认保持浏览器当前设置。
true 或者 false keepKeyChains (Sim-only) 当 Appium 会话开始/结束时是否保留存放密码存放记录(keychains) (库(Library)/钥匙串(Keychains))true 或者 false localizableStringsDir 从哪⾥查本地化字符串。默认值 en.lproj en.lproj processArguments 通过 instruments 传递到 AUT 的参数
如 -myflag interKeyDelay 以毫秒为单位,按下每⼀个按键之间的延迟时间。如 100showIOSLog 是否在 Appium 的⽇志中显⽰设备的⽇志。默认值false
true 或者 false
sendKeyStrategy 输⼊⽂字到⽂字框的策略。模拟器默认值:oneByOne(⼀个接着⼀个)。真实设备默认值:grouped (分组输⼊)
oneByOne, grouped 或setValue screenshotWaitTimeout 以秒为单位,⽣成屏幕截图的最长等待时间。默认值: 10。
如 5
waitForAppScript
⽤于判断 "应⽤是否被启动” 的 iOS ⾃动化脚本代码。默认情况下系统等待直到页⾯内容⾮空。结果必须是布尔类型。
例如 true;,target.elements().length > 0;, $.delay(5000); true;
desired_caps = {
'platformName': 'Android', 'platformVersion': '4.4.4', 'deviceName': 'S5',
'appPackage': '', #包名 'appActivity': '', #app ⼊⼝
'udid': '192.168.66.101:5555', # genymotion 设备 'noReset': 'true',
'unicodeKeyboard': 'True', 'resetKeyboard': 'True',}account = driver.find_element_by_id('id/rel_content')account.find_element_by_id('id/edit_acount')driver.press_keycode(61)print ("换⾏操作")
if driver.find_element_by_id('id/img_clear_acount'):
clr_account = driver.find_element_by_id('id/img_clear_acount').click() print ("账号清除成功")account.send_keys('10086')print ("账号输⼊完毕")time.sleep(2)
driver.press_keycode(61)print ("换⾏操作")
password = driver.find_element_by_id('id/rel_content')password.find_element_by_id('id/edit_pass')password.send_keys('123456')print ("密码输⼊完毕")
driver.find_element_by_xpath('//android.widget.TextView[@text="登 录"]').click()print ("点击登录按钮")
上述代码中,使⽤到的常规定位⽅式,id,xpath,还有更多的操作api,可参见这篇博⽂,⾥⾯总结的很详细,。
运⾏appium
代码讲述完毕,那⼜如何使⽤appium来运⾏代码呢?步骤如下:
1.配置appium
打开appium,对参数进⾏配置,先配置dvices name,获取devices name的⽅式使⽤命令adb devices即可,配置如下
2.服务设置
将server address配置为本地ip即可,端⼝默认为4723,配置如下:
3.启动appium
点击appium界⾯上的启动按钮,出现如下界⾯,则说明启动成功。
服务启动成功,则可以运⾏代码了,在模拟器中可查看到对应的操作。运⾏代码时,会⾃动在真机或模拟器上安装两个app,appium settings和unlock,⾃动安装的,可以忽略。上述就是Appium-Server使⽤的配置了,但Appium-Server有⼀两年没有更新了。Windows版在2015年底⽌步于的 AppiumForWindows_1_4_16_1.zip 。
于是,新的⼯具 Appium-desktop 来了! 它来继续 Appium-Server的使命。当然,Appium-Server当前仍然是可⽤的。接下来则来说说Appium-desktop。
Appium-desktop
下载安装
下载地址:,依照各⾃需要的版本下载即可。⽐如windows版,将下载下来的.exe⽂件,双击安装即可。
安装配置
在安装好了之后,⽤appium-doctor来检查是否配置成功,但新版的appium是没有doctor⽂件的,所以需要通过npm下载并安装,命令如下:
npm install -g appium-doctor
输⼊命令后,出现如下图所⽰界⾯:
安装好了之后,再使⽤如下命令检查新版的appium是否安装成功,命令如下:
appium-doctor
输⼊命令后,出现如下界⾯,则说明安装成功:
启⽤配置
1.启动服务
打开安装好的appium,出现如下界⾯
连接本机的话,host可以不配置,就⽤默认的0.0.0.0,端⼝也⽤默认的4723,直接点击start server v1.13.0按钮,出现如下界⾯,说明服务启动成功
2.新建连接
new session window,进⼊到如下页⾯:
输⼊参数如下:
参数配置好了之后,最好是保存下,避免下次使⽤的时候,需要再次输⼊。
3.元素定位
点击start session按钮后,进⼊到如下页⾯:
在该页⾯就可以进⾏元素定位了,元素定位的详细api,可以参见之前提到的那篇api⽂档。
将写好的代码,在编译⼯具中执⾏即可,便可在模拟器或真机上看到效果,效果图就不上了。
问题总结
1.⽀持安卓⾼版本
在模拟器那⼀篇博⽂中,我说我使⽤模拟器的原因,就是因为⽼版的appium不⽀持android8及以上的版本,今天在使⽤appium-desktop时,发现可以直接使⽤appium desktop定位元素。
2.布尔类型报错
'unicodeKeyboard' must be of type boolean; 'resetKeyboard' must be of type boolean
该问题是appium版本的问题,新版本unicodeKeyboard、resetKeyboard是布尔类型,将True的双引号去掉,就可以了,如:
'unicodeKeyboard': True,
'resetKeyboard': True,
以上就是我个⼈在使⽤上,对appium-server和appium-desktop认知的区别了,具体其他的区别,还待深⼊使⽤后发现。今天分享就到这了,有描述有误的地⽅,欢迎批评指正。祝⼤家节⽇快乐。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论