dw怎么做网站标题图标,做网站重庆,宁波哪里可以做网站,apicloud官网App自动化测试之Appium基础篇』| Desired Capabilities详解与使用 1 关于appium driver2 安装appium driver3 安装Appium Python Client4 安装测试对象5 获取测试对象信息5.1 使用dumpsys5.2 使用AndroidKiller5.3 使用aapt 6 Capabilities详解6.1 Capabilities介绍6.2 automat… App自动化测试之Appium基础篇』| Desired Capabilities详解与使用 1 关于appium driver2 安装appium driver3 安装Appium Python Client4 安装测试对象5 获取测试对象信息5.1 使用dumpsys5.2 使用AndroidKiller5.3 使用aapt 6 Capabilities详解6.1 Capabilities介绍6.2 automationName6.3 platformName6.4 platformVersion6.5 deviceName6.6 app6.7 newCommandTimeout6.8 noReset6.9 fullReset6.10 appPackage和appActivity 7 官方示例8 测试示例9 启动问题排查9.1 urllib3 v2.0 only supports OpenSSL 1.1.19.2 UnknownError: An unknown server-side error occurred 1 关于appium driver
在之前的文章我们已经完整的安装了appium以及安装过程中相关问题的排查我们启动下appium的服务看看
C:\Users\Administratorappium
[Appium] Welcome to Appium v2.2.3
[Appium] Appium REST http interface listener started on http://0.0.0.0:4723
[Appium] You can provide the following URLs in your client code to connect to this server:
[Appium] http://172.16.1.33:4723/
[Appium] http://127.0.0.1:4723/ (only accessible from the same host)
[Appium] http://172.23.16.1:4723/
[Appium] No drivers have been installed in C:\Users\Administrator\.appium. Use the appium driver command to install the one(s) you want to use.
[Appium] No plugins have been installed. Use the appium plugin command to install the one(s) you want to use.发现提示appium driver没有安装我们安装下吧appium driver测试驱动是分开管理的默认不会安装任何的测试驱动通过 appium driver 子命令管理所有的驱动官方可用的驱动如下
C:\Users\Administratorappium driver list- Listing available drivers
✔ Listing available drivers- uiautomator2 [not installed]- xcuitest [not installed]- mac2 [not installed]- espresso [not installed]- safari [not installed]- gecko [not installed]- chromium [not installed]我们的环境是Android所以需要安装下uiautomator2其他的按照情况来安装即可。
2 安装appium driver
我们使用以下appium driver install uiautomator2命令安装但是报错了
C:\Windows\System32appium driver install uiautomator2
- Installing uiautomator2 using NPM install spec appium-uiautomator2-driver
× Installing uiautomator2 using NPM install spec appium-uiautomator2-driver
Error: × Encountered an error when installing package: npm command install --save-dev --omitpeer --save-exact --global-style --no-package-lock appium-uiautomator2-driver --json failed with code 1.STDOUT:
{error: {code: ETIMEDOUT,summary: request to https://registry.npmjs.org/appium-uiautomator2-driver failed, reason: ,detail: This is a problem related to network connectivity.\nIn most cases you are behind a proxy or have bad network settings.\n\nIf you are behind a proxy, please make sure that the\nproxy config is set properly. See: npm help config解决方法是修改npm的镜像源
# 1.查看npm镜像设置
npm config get registry
# 2.将npm设置为淘宝镜像
npm config set registry https://registry.npm.taobao.org
# 3.再次查看npm镜像设置
npm config get registry再次安装就成功了
C:\Windows\System32appium driver install uiautomator2- Installing uiautomator2 using NPM install spec appium-uiautomator2-driver
√ Installing uiautomator2 using NPM install spec appium-uiautomator2-driver
i Driver uiautomator22.34.2 successfully installed- automationName: UiAutomator2- platformNames: [Android]3 安装Appium Python Client
Python Client针对不同的语言有不同的安装方法我们使用的python版本的关于appium的安装过程的步骤之前已经介绍也可参考管放文档Quickstart Intro安装Appium Python Client
pip install Appium-Python-ClientSuccessfully built Appium-Python-Client
Installing collected packages: sortedcontainers, urllib3, sniffio, pysocks, pycparser, idna, h11, certifi, attrs, wsproto, outcome, cffi, trio, trio-websocket, selenium, Appium-Python-Client
Successfully installed Appium-Python-Client-3.1.0 attrs-23.1.0 certifi-2023.11.17 cffi-1.16.0 h11-0.14.0 idna-3.6 outcome-1.3.0.post0 pycparser-2.21 pysocks-1.7.1 selenium-4.16.0 sniffio-1.3.0 sortedcontainers-2.4.0 trio-0.23.1 trio-websocket-0.11.1 urllib3-2.1.0 wsproto-1.2.04 安装测试对象
下载一个支持安卓6.0的扣扣因为我们模拟器是安卓6.0的把下载的扣扣传到模拟器中本地保存在如下
F:\monkey_test\QQv5.apk我们先卸载之前装的
adb uninstall com.tencent.mobileqqiF:\monkey_testadb uninstall com.tencent.mobileqqi
Success重新安装
adb install QQv5.apk /data/tempF:\monkey_testadb install QQv5.apk /data/temp
Performing Push Install
QQv5.apk: 1 file pushed, 0 skipped. 13.1 MB/s (22506899 bytes in 1.634s)pkg: /data/local/tmp/QQv5.apkver: /data/temp
Success5 获取测试对象信息
以下有三种方式获取应用程序的信息我们需要获取的重要信息为当前app的包名和活动窗口名三种方式都可以选择自己方便的即可。
5.1 使用dumpsys
前提是需要先打开需要测试的app我们启动APP后在命令行输入
adb shell dumpsys | find mFocusedActivity可以看到如下 mFocusedActivity: ActivityRecord{54035c5 u0 com.tencent.mobileqqi/com.tencent.mobileqq.activity.InstallActivity t4}那么重要信息有两个
# 包名com.tencent.mobileqqi
# 活动窗口名com.tencent.mobileqq.activity.LoginActivity5.2 使用AndroidKiller
AndroidKiller主要是对apk进行反编译操作获取相关信息这里不说了自行搜索吧。
5.3 使用aapt
这个相对来说会方便点直接找到安装包的路径使用命令查看即可比如我的安装包在本地的F:\monkey_test下
aapt dump badging QQv5.apk查看的信息如下
F:\monkey_testaapt dump badging QQv5.apk
package: namecom.tencent.mobileqqi versionCode6062 versionName5.1.1
install-location:auto
sdkVersion:7
targetSdkVersion:15
uses-permission: namecom.android.launcher.permission.INSTALL_SHORTCUT
uses-permission: nameandroid.permission.INTERNET
uses-permission: nameandroid.permission.VIBRATE
uses-permission: nameandroid.permission.ACCESS_NETWORK_STATE
uses-permission: nameandroid.permission.CHANGE_CONFIGURATION
uses-permission: nameandroid.permission.RECEIVE_BOOT_COMPLETED
uses-permission: nameandroid.permission.WAKE_LOCK
uses-permission: nameandroid.permission.SYSTEM_ALERT_WINDOW
uses-permission: nameandroid.permission.RECORD_AUDIO
uses-permission: namecom.tencent.msf.permission.account.sync
uses-permission: nameandroid.permission.MODIFY_AUDIO_SETTINGS
uses-permission: nameandroid.permission.CAMERA
uses-permission: nameandroid.permission.CHANGE_WIFI_STATE
uses-permission: nameandroid.permission.ACCESS_WIFI_STATE
uses-permission: nameandroid.permission.READ_PHONE_STATE
uses-permission: nameandroid.permission.KILL_BACKGROUND_PROCESSES
uses-permission: nameandroid.permission.CALL_PHONE
uses-permission: namecom.android.launcher.permission.READ_SETTINGS
uses-permission: namecom.android.launcher.permission.UNINSTALL_SHORTCUT
uses-permission: nameandroid.permission.PERSISTENT_ACTIVITY
uses-permission: nameandroid.permission.WRITE_SETTINGS
uses-permission: nameandroid.permission.SEND_SMS
uses-permission: nameandroid.permission.READ_SMS
uses-permission: nameandroid.permission.GET_TASKS
uses-permission: namecom.tencent.permission.VIRUS_SCAN
uses-permission: nameandroid.permission.READ_LOGS
uses-permission: nameandroid.permission.READ_CONTACTS
uses-permission: nameandroid.permission.FLASHLIGHT
uses-permission: nameandroid.permission.BLUETOOTH
uses-permission: nameandroid.permission.BLUETOOTH_ADMIN
uses-permission: nameandroid.permission.BROADCAST_STICKY
uses-permission: nameandroid.permission.WRITE_CONTACTS
uses-permission: nameandroid.permission.WRITE_OWNER_DATA
uses-permission: nameandroid.permission.SYSTEM_OVERLAY_WINDOW
uses-permission: nameandroid.permission.CHANGE_NETWORK_STATE
uses-permission: namecom.android.launcher.permission.WRITE_SETTINGS
uses-permission: namecom.android.launcher3.permission.READ_SETTINGS
uses-permission: namecom.android.launcher3.permission.WRITE_SETTINGS
uses-permission: namecom.htc.launcher.permission.READ_SETTINGS
uses-permission: namecom.htc.launcher.permission.WRITE_SETTINGS
uses-permission: namecom.huawei.launcher3.permission.READ_SETTINGS
uses-permission: namecom.google.android.launcher.permission.READ_SETTINGS
uses-permission: namecom.google.android.launcher.permission.WRITE_SETTINGS
uses-permission: nameandroid.permission.READ_CALENDAR
uses-permission: nameandroid.permission.WRITE_CALENDAR
uses-permission: namecom.sonyericsson.home.permission.BROADCAST_BADGE
uses-permission: namecom.sec.android.provider.badge.permission.READ
uses-permission: namecom.sec.android.provider.badge.permission.WRITE
uses-permission: nameandroid.permission.GET_ACCOUNTS
uses-permission: nameandroid.permission.MANAGE_ACCOUNTS
uses-permission: nameandroid.permission.AUTHENTICATE_ACCOUNTS
uses-permission: nameandroid.permission.WRITE_CONTACTS
uses-permission: nameandroid.permission.READ_SYNC_SETTINGS
uses-permission: nameandroid.permission.WRITE_SYNC_SETTINGS
uses-permission: nameandroid.permission.DISABLE_KEYGUARD
uses-permission: nameandroid.permission.CHANGE_WIFI_MULTICAST_STATE
uses-permission: namecom.qq.qcloud.permission.ACCESS_ALBUM_BACKUP_LIST
uses-permission: namecom.android.vending.BILLING
uses-permission: nameandroid.permission.RESTART_PACKAGES
uses-permission: nameandroid.permission.NFC
application-label:QQi
application-label-de:QQi
application-label-es:QQi
application-label-fr:QQi
application-label-ja:QQi
application-label-ko:QQi
application-label-zh-CN:QQi
application-label-zh-TW:QQi
application-icon-120:R/m/hcw.png
application-icon-160:R/m/hcw.png
application-icon-240:R/m/hcw.png
application-icon-320:R/m/hcw.png
application-icon-480:R/m/hcw.png
application-icon-65535:R/m/hcw.png
application: labelQQi iconR/m/hcw.png
launchable-activity: namecom.tencent.mobileqq.activity.SplashActivity labelQQi icon
uses-library-not-required:com.google.android.media.effects
uses-library-not-required:com.motorola.hardware.frontcamera
uses-permission: namecom.tencent.photos.permission.DATA
uses-permission: namecom.tencent.msf.permission.account.sync
uses-permission: namecom.tencent.music.data.permission
uses-permission: namecom.tencent.msf.permission.ACCOUNT_NOTICE
uses-permission: nameandroid.permission.CHANGE_WIFI_STATE
uses-permission: nameandroid.permission.INTERNET
uses-permission: nameandroid.permission.ACCESS_WIFI_STATE
uses-permission: nameandroid.permission.ACCESS_NETWORK_STATE
uses-permission: nameandroid.permission.ACCESS_FINE_LOCATION
uses-permission: nameandroid.permission.ACCESS_COARSE_LOCATION
uses-permission: nameandroid.permission.CAMERA
uses-permission: nameandroid.permission.READ_PHONE_STATE
uses-permission: nameandroid.permission.WAKE_LOCK
uses-permission: namecom.android.launcher.permission.INSTALL_SHORTCUT
uses-permission: nameandroid.permission.WRITE_EXTERNAL_STORAGE
uses-permission: nameandroid.permission.RECEIVE_BOOT_COMPLETED
uses-permission: namecom.tencent.msg.permission.pushnotify
uses-permission: namecom.tencent.msf.permission.account.sync
uses-permission: nameandroid.permission.READ_EXTERNAL_STORAGE
uses-implied-permission: nameandroid.permission.READ_EXTERNAL_STORAGE reasonrequested WRITE_EXTERNAL_STORAGE
uses-permission: nameandroid.permission.READ_CALL_LOG
uses-implied-permission: nameandroid.permission.READ_CALL_LOG reasontargetSdkVersion 16 and requested READ_CONTACTS
uses-permission: nameandroid.permission.WRITE_CALL_LOG
uses-implied-permission: nameandroid.permission.WRITE_CALL_LOG reasontargetSdkVersion 16 and requested WRITE_CONTACTS
feature-group: labeluses-feature-not-required: nameandroid.hardware.camerauses-feature-not-required: nameandroid.hardware.camera.autofocususes-feature-not-required: nameandroid.hardware.locationuses-feature-not-required: nameandroid.hardware.location.gpsuses-feature-not-required: nameandroid.hardware.location.networkuses-feature-not-required: nameandroid.hardware.telephonyuses-feature: nameandroid.hardware.bluetoothuses-implied-feature: nameandroid.hardware.bluetooth reasonrequested android.permission.BLUETOOTH permission, requested android.permission.BLUETOOTH_ADMIN permission, and targetSdkVersion 4uses-feature: nameandroid.hardware.faketouchuses-implied-feature: nameandroid.hardware.faketouch reasondefault feature for all appsuses-feature: nameandroid.hardware.microphoneuses-implied-feature: nameandroid.hardware.microphone reasonrequested android.permission.RECORD_AUDIO permissionuses-feature: nameandroid.hardware.screen.portraituses-implied-feature: nameandroid.hardware.screen.portrait reasonone or more activities have specified a portrait orientationuses-feature: nameandroid.hardware.wifiuses-implied-feature: nameandroid.hardware.wifi reasonrequested android.permission.ACCESS_WIFI_STATE permission, requested android.permission.CHANGE_WIFI_MULTICAST_STATE permission, and requested android.permission.CHANGE_WIFI_STATE permission
main
other-activities
other-receivers
other-services
supports-screens: small normal large xlarge
supports-any-density: true
locales: --_-- de es fr ja ko zh-CN zh-TW
densities: 120 160 240 320 480 65535
native-code: armeabi需要的重要信息为 namecom.tencent.mobileqqilaunchable-activity: namecom.tencent.mobileqq.activity.SplashActivity如果aapt提示找不到命令需要把它的安装路径加入到系统环境变量中aapt的路径在
D:\android-sdk-windows\build-tools\29.0.36 Capabilities详解
6.1 Capabilities介绍 Capabilities是启动appium服务端的参数设置 关于Capabilities可以参考官方文档Appium capabilities 以下重点了解几个Capabilities参数。
6.2 automationName
automationName表示自动化测试引擎好比测试驱动一样可供选择的有Appium、Selendriod、uiautomator2等本文及后续都使用的是uiautomator2。
6.3 platformName
platformName表示手机或模拟器使用的操作系统一般包括iOS、Android等本文使用Android。
6.4 platformVersion
platformVersion表示真机或模拟器操作系统的版本本文为Android6.0。
6.5 deviceName
deviceName表示使用的测试设备类型可以使用adb devices查看设备类型名称
C:\Windows\System32adb devices
List of devices attached
emulator-5554 device比如我的是emulator-5554。
6.6 app
app表示安装包如果指定这个参数就会把指定的app安装到指定的路径。
6.7 newCommandTimeout
newCommandTimeout表示两条Appium命令间的最长时间间隔如果超时会自动退出app。
6.8 noReset
noReset表示不需要在会话前重置应用状态默认为false。
6.9 fullReset
fullReset可通过卸载而不清空数据来重置应用状态默认为false。
6.10 appPackage和appActivity
启动待测试app的appPackage和appActivityappPackage是app的包名appActivity是app的活动窗口名这两个参数的获取已经在第五章节说明了。 还有几个参数这个不一一说明了直接看官方文档即可。 7 官方示例
以下这个是官方的一个示例是python版本的
import unittest
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBycapabilities dict(platformNameAndroid,automationNameuiautomator2,deviceNameAndroid,appPackagecom.android.settings,appActivity.Settings,languageen,localeUS
)appium_server_url http://localhost:4723class TestAppium(unittest.TestCase):def setUp(self) - None:self.driver webdriver.Remote(appium_server_url, optionsUiAutomator2Options().load_capabilities(capabilities))def tearDown(self) - None:if self.driver:self.driver.quit()def test_find_battery(self) - None:el self.driver.find_element(byAppiumBy.XPATH, value//*[textBattery])el.click()if __name__ __main__:unittest.main()8 测试示例
这里我们写一个我们自己的测试示例之前我们已经安装了测试对象扣扣且已经获取到了它的相关信息我们启动appium服务直接在命令行输入appium即可 设计如下脚本 # -*- coding:utf-8 -*-
# 作者虫无涯
# 日期2023/12/12
# 文件名称test_qq.py
# 作用appium启动一个应用程序
# 联系VX(NoamaNelson)
# 博客https://blog.csdn.net/NoamaNelsonfrom appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
import timecapabilities dict(platformNameAndroid,automationNameuiautomator2,deviceNameemulator-5554,appPackagecom.tencent.mobileqqi,appActivitycom.tencent.mobileqq.activity.SplashActivity,languageen,localeUS
)print(start....)
# 创建driver对象
appium_server_url http://localhost:4723
driver webdriver.Remote(appium_server_url, optionsUiAutomator2Options().load_capabilities(capabilities))# 启动应用程
print(driver.capabilities)
# driver.launch_app()time.sleep(1)
print(已经连接到模拟器了~)driver.quit()执行脚本
D:\Python37\python.exe F:/python_study/appium_test/test_qq.py
start....
{platformName: Android,
automationName: uiautomator2,
deviceName: emulator-5554,
appPackage: com.tencent.mobileqqi,
appActivity: com.tencent.mobileqq.activity.SplashActivity,
language: en,
locale: US,
platform: LINUX,
webStorageEnabled: False,
takesScreenshot: True,
javascriptEnabled: True,
databaseEnabled: False,
networkConnectionEnabled: True,
locationContextEnabled: False,
warnings: {},
desired: {platformName: Android, automationName: uiautomator2, deviceName: emulator-5554, appPackage: com.tencent.mobileqqi, appActivity: com.tencent.mobileqq.activity.SplashActivity, language: en, locale: US},
deviceUDID: emulator-5554, pixelRatio: 2, statBarHeight: 48, viewportRect: {left: 0, top: 48, width: 768, height: 1136},
deviceApiLevel: 23, platformVersion: 6.0, deviceManufacturer: unknown, deviceModel: sdk_phone_armv7, deviceScreenSize: 768x1280, deviceScreenDensity: 320}
已经连接到模拟器了~这时候appium的服务端也给出了启动信息
[AndroidUiautomator2Driver455c (f190abfc)] Proxying [DELETE /] to [DELETE http://127.0.0.1:8200/session/f9cc13f6-4c4e-4ab5-a2eb-8dfb44f05100] with no body
[AndroidUiautomator2Driver455c (f190abfc)] Got response with status 200: {sessionId:f9cc13f6-4c4e-4ab5-a2eb-8dfb44f05100,value:null}
[ADB] Running D:\android-sdk-windows\platform-tools\adb.exe -P 5037 -s emulator-5554 shell am force-stop com.tencent.mobileqqi
[Instrumentation] .
[Instrumentation] Time: 74.226
[Instrumentation]
[Instrumentation] OK (1 test)同时模拟器中也打开了扣扣应用程序。
9 启动问题排查
9.1 urllib3 v2.0 only supports OpenSSL 1.1.1
如果启动过程出现这个错误
DEPRECATION: celery 5.0.5 has a non-standard dependency specifier pytzdev. pip 24.0 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of celery or contact the author to suggest that they release a version with a conforming dependency specifiers. Discussion can be found at https://github.com/pypa/pip/issues/12063则说明Python 环境使用的是 OpenSSL 1.1.0h而 urllib3 v2.0 需要使用 OpenSSL 1.1.1解决方法是
# 要么升级 OpenSSL 到 1.1.1 或更高版本。
# 要么降级 urllib3 到 v1.x 版本可以通过命令 pip install urllib31.* 来实现。本文使用降级 urllib3来解决的但是可能会导致其他依赖包问题。
pip install urllib31.26.159.2 UnknownError: An unknown server-side error occurred
如果出现以下错误
UnknownError: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: Command D:\\android-sdk-windows\\platform-tools\\adb.exe -P 5037 -s emulator-5554 shell pm install -r /data/local/tmp/appium_cache/72200c7819db015d5717d05800401c19b35842d5.apk timed out after 20000ms. Try to increase the 20000ms adb execution timeout represented by uiautomator2ServerInstallTimeout capability说明adb安装appium服务的时候报错解决方法是先卸载
adb uninstall /data/local/tmp/appium_cache/72200c7819db015d5717d05800401c19b35842d5.apk再原样使用命令安装即可
adb -P 5037 -s emulator-5554 shell pm install -r /data/local/tmp/appium_cache/72200c7819db015d5717d05800401c19b35842d5.apk