Appium学习日记(四)——搭建Android自动化测试框架以及真机测试
一、安装并配置Appium环境
- 下载安装appium、Appium Server,、
- 配置adb,JDK,SDK、AppiumInspector
同学习日记(二)、(三)。
二、Appium真机测试
2-1、连接手机(测试机)
- 通过USB线连接Android手机和电脑,打开手机的开发者模式,开启USB调试模式(方法自行百度)。
- 打开cmd输入命令
adb devices
,显示连接手机的udid即为连接成功。
- 输入
adb devices
后如果List of devices attached下为空,说明手机连接电脑没有成功。可做如下尝试:
1,拔掉手机重新连接
2,更换USB线
3,重启adb。先杀死adb进程adb kill-server
,再重启adb start-server
4,检查adb版本,版本太低则更新
二、获取测试手机及被测app的相应信息(即capability配置内容)
- platformName,声明被测手机系统是ios还是Android。
- platformVersion,即测试手机的Android版本号。可在手机设置里面查看,也可以通过命令
adb shell getprop ro.build.version.release
查看。 - deviceName,即测试手机的名称。可在手机设置里面查看,也可以通过命令
adb devices -l
或者adb shell getprop ro.product.model
查看,其中model即为连接的测试机的名称。 - appPackage,即被测app的包名。
- appActivity,即被测app的launcherActivity。通过命令
adb shell dumpsys activity | findstr “mResume”
查看(先在手机上打开app,再输入命令)。以今日头条app为例。 - resetKeyboard 输入法
- noReset 是否控制清楚session信息 默认为
false
。
如果手机系统在Android 8.1以下,则需使用命令adb shell dumpsys activity | findstr “mFocus”
查看。
三、appium启动app
- 电脑打开appium,点击“Start Server”。
- 出现如下页面,再去打开“Appium Inspector.exe”,启动appium服务。
- 输入第二步获取的配置内容,点击“Start Session”按钮(可先点击3所指的按钮保存,下次直接选择即可)。
Android独有
键 | 描述 | 值 |
---|---|---|
appActivity | Activity 的名字是指从你的包中所要启动的 Android acticity 。他通常需要再前面添加. (例如 使用 .MainActivity 代替 MainActivity ) | MainActivity, .Settings |
appPackage | 运行的 Android 应用的包名 | com.example.android.myApp, com.android.settings |
appWaitActivity | 用于等待启动的 Android Activity 名称 | SplashActivity |
appWaitPackage | 用于等待启动的 Android 应用的包 | com.example.android.myApp, com.android.settings |
appWaitDuration | 用于等待 appWaitActivity 启动的超时时间(以毫秒 为单位)(默认值为 20000 ) | 30000 |
deviceReadyTimeout | 用于等待模拟器或真机准备就绪的超时时间 | 5 |
androidCoverage | 用于执行测试的 instrumentation 类。 传送 -w 参数到如下命令 adb shell am instrument -e coverage true -w | com.my.Pkg/com.my.Pkg.instrumentation.MyInstrumentation |
enablePerformanceLogging | (仅适用于 Chrome 与 webview)开启 Chromedriver 的性能日志。(默认值为 false ) | true, false |
androidDeviceReadyTimeout | 用于等待设备在启动应用后准备就绪的超时时间。以秒 为单位。 | 例如 30 |
androidInstallTimeout | 用于等待在设备中安装 apk 所花费的时间(以毫秒 为单位)。默认值为 90000 | 例如 90000 |
adbPort | 用来连接 ADB 服务器的端口(默认值为 5037 ) | 5037 |
androidDeviceSocket | 开发工具的 socket 名称。只有在被测应用是一个使用 Chromium 内核的浏览器时才需要。socket 会被浏览器打开,然后 Chromedriver 把它作为开发者工具来进行连接。 | 例如 chrome_devtools_remote |
avd | 被启动 avd 的名字 | 例如 api19 |
avdLaunchTimeout | 用于等待 avd 启动并连接 ADB 的超时时间(以毫秒 为单位),默认值为 120000 。 | 300000 |
avdReadyTimeout | 用于等待 avd 完成启动动画的超时时间(以毫秒 为单位),默认值为 120000 。 | 300000 |
avdArgs | 启动 avd 时使用的额外参数 | 例如 -netfast |
useKeystore | 使用自定义的 keystore 给 apk 签名,默认值为 false | true或false |
keystorePath | 自定义 keystore 的路径, 默认路径为 ~/.android/debug.keystore | 例如 /path/to.keystore |
keystorePassword | 自定义 keystore 的密码 | 例如 foo |
keyAlias | key 的别名 | 例如 androiddebugkey |
keyPassword | key 的密码 | 例如 foo |
chromedriverExecutable | webdriver 可执行文件的绝对路径(如果 Chromium 内嵌一个自己提供的 webdriver,则应使用他去替换掉 Appium 自带的 chromedriver) | /abs/path/to/webdriver |
autoWebviewTimeout | 用于等待 Webview 上下文(context)激活的时间(以毫秒 为单位)。默认值为 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 参数。请查看 Intent 参数 | 例如 --esn <EXTRA_KEY>, --ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE>, 等等。 |
dontStopAppOnReset | 在使用 adb 启动应用之前,不要终止被测应用的进程。如果被测应用是被其他钩子(anchor)应用所创建的,设置该参数为 false 后,就允许钩子(anchor)应用的进程在使用 adb 启动被测应用期间仍然存在。换而言之,设置 dontStopAppOnReset 为 true 后,我们在 adb shell am start 的调用中不需要包含 -S 标识(flag)。忽略该 capability 或 设置为 false 的话,就需要包含 -S 标识(flag)。默认值为 false | 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 |
disableAndroidWatchers | 禁用 android 监视器(watchers )。监视器用于监视应用程序的无响应状态(anr)和崩溃(crash),禁用会降低 Android 设备或模拟器的 CPU 使用率。该 capability 仅在使用 UiAutomator 时有效,不适用于 selendroid ,默认设置为 false 。 | true 或 false |
chromeOptions | 允许对 ChromeDriver 传 chromeOptions 的参数。了解更多信息请查阅 chromeOptions | chromeOptions: {args: ['--disable-popup-blocking']} |
recreateChromeDriverSessions | 当移除非 ChromeDriver webview 时,终止掉 ChromeDriver 的 session。默认设置为 false | true或false |
nativeWebScreenshot | 在 web 的上下文(context),使用原生(native)的方法去截图,而不是用过代理的 ChromeDriver 。默认值为 false | true或false |
androidScreenshotPath | 在设备中截图被保存的目录名。默认值为 /data/local/tmp | 例如 /sdcard/screenshots/ |
autoGrantPermissions | 让Appium自动确定您的应用需要哪些权限,并在安装时将其授予应用。默认设置为 false | true或false |
- 此时,如果测试机是第一次连接appium的话,手机上会提示安装两个应用:Appium settings、io.appium.uiautomator2.server,容许安装,且必须安装成功。 - 再次点击上图中4所指的“Start Session”按钮,我们会发现手机上会自动启动今日头条app,且appium会出现如下窗口。
至此,我们就成功地通过appium启动了测试机上的app。我们可以在这个页面查看app当前页面的元素的属性,如下图,3所指便是弹窗【我知道了】按钮的元素属性,用于后面自动化测试过程中元素定位。