«Тестирование автоматизации приложений — основы Appium» | Подробное объяснение и использование желаемых возможностей
«Тестирование автоматизации приложений — основы Appium» | Подробное объяснение и использование желаемых возможностей

1 О драйвере приложения

  • В предыдущей статье мы полностью установилиappiumИ устранение связанных с этим проблем в процессе установки.;
  • Давайте начнемappiumОзнакомьтесь с услугами:
Язык кода:python
кодКоличество запусков:0
копировать
C:\Users\Administrator>appium
[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 Подкоманда управляет всеми драйверами;
  • Официально доступные драйверы:
Язык кода:python
кодКоличество запусков:0
копировать
C:\Users\Administrator>appium 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 install uiautomator2Установка команд,Но произошла ошибка:
Язык кода:python
кодКоличество запусков:0
копировать
C:\Windows\System32>appium 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 --omit=peer --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\n'proxy' config is set properly.  See: 'npm help config'"
  • Решение состоит в том, чтобы изменить источник зеркала npm:
Язык кода:python
кодКоличество запусков:0
копировать
# 1. Просмотр настроек зеркала npm
npm config get registry
# 2. Установите npm в качестве зеркала Taobao.
npm config set registry https://registry.npm.taobao.org
# 3. Еще раз проверьте настройки зеркала npm.
npm config get registry
Вставьте сюда описание изображения
Вставьте сюда описание изображения
  • Установка снова прошла успешно:
Язык кода:python
кодКоличество запусков:0
копировать
C:\Windows\System32>appium driver install uiautomator2
 - Installing 'uiautomator2' using NPM install spec 'appium-uiautomator2-driver'
√ Installing 'uiautomator2' using NPM install spec 'appium-uiautomator2-driver'
i Driver uiautomator2@2.34.2 successfully installed
 - automationName: UiAutomator2
 - platformNames: ["Android"]

3. Установите клиент Appium Python

  • Python ClientДля разных языков существуют разные способы установки.,мы используемpythonверсия;
  • О Этапы процесса установки приложения были описаны ранее.,Вы также можете обратиться к документации Guanfang.:Quickstart Intro
  • УстановитьAppium Python Client
Язык кода:python
кодКоличество запусков:0
копировать
pip install Appium-Python-Client
Язык кода:python
кодКоличество запусков:0
копировать
Successfully 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.0

4 Установите тестовый объект

  • Загрузите тот, который поддерживает Android6.0изпряжка,Потому что наш эмулятор — Android 6.0;
  • Пучок Внизнагрузкаизпряжкапроходитьприезжать В симуляторе,Сохраните локально следующим образом:
Язык кода:python
кодКоличество запусков:0
копировать
F:\monkey_test\QQv5.apk
Вставьте сюда описание изображения
Вставьте сюда описание изображения
  • Давайте сначала удалим ранее установленный:
Язык кода:python
кодКоличество запусков:0
копировать
adb uninstall com.tencent.mobileqqi
Вставьте сюда описание изображения
Вставьте сюда описание изображения
Язык кода:python
кодКоличество запусков:0
копировать
F:\monkey_test>adb uninstall com.tencent.mobileqqi
Success
  • Переустановить:
Язык кода:python
кодКоличество запусков:0
копировать
adb install QQv5.apk /data/temp
Язык кода:python
кодКоличество запусков:0
копировать
F:\monkey_test>adb 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.apk
        ver: /data/temp
Success

5 Получить информацию об объекте тестирования

  • Существует три способа получить информацию о приложении;
  • нам нужно получитьиз Важная информация:Имя пакета и имя активного окна текущего приложения.
  • Доступны все три способа, просто выберите тот, который вам удобен.

5.1 Использование дампси

  • помещениеда Его нужно сначала открыть и проверить.изapp
  • мы начинаемAPPЗатем введите в командной строке:
Язык кода:python
кодКоличество запусков:0
копировать
adb shell dumpsys | find "mFocusedActivity"
  • Это можно увидеть следующим образом:
Язык кода:python
кодКоличество запусков:0
копировать
 mFocusedActivity: ActivityRecord{54035c5 u0 com.tencent.mobileqqi/com.tencent.mobileqq.activity.InstallActivity t4}
  • Итак, есть две важные информации:
Язык кода:python
кодКоличество запусков:0
копировать
# Имя пакета: com.tencent.mobileqqi
# Имя окна активности: com.tencent.mobileqq.activity.LoginActivity.

5.2 Использование AndroidKiller

  • AndroidKillerВ основном правapkВыполните операции декомпиляции для получения соответствующей информации.;
  • Я не буду здесь вдаваться в подробности, просто поищите сами.

5.3 Использование aapt

  • Это относительно удобнее. Вы можете напрямую найти путь к установочному пакету и использовать команду для его просмотра;
  • как яиз Установить Упаковано локальноизF:\monkey_testВниз:
Язык кода:python
кодКоличество запусков:0
копировать
aapt dump badging QQv5.apk
  • Информация для просмотра следующая:
Язык кода:python
кодКоличество запусков:0
копировать
F:\monkey_test>aapt dump badging QQv5.apk
package: name='com.tencent.mobileqqi' versionCode='6062' versionName='5.1.1'
install-location:'auto'
sdkVersion:'7'
targetSdkVersion:'15'
uses-permission: name='com.android.launcher.permission.INSTALL_SHORTCUT'
uses-permission: name='android.permission.INTERNET'
uses-permission: name='android.permission.VIBRATE'
uses-permission: name='android.permission.ACCESS_NETWORK_STATE'
uses-permission: name='android.permission.CHANGE_CONFIGURATION'
uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED'
uses-permission: name='android.permission.WAKE_LOCK'
uses-permission: name='android.permission.SYSTEM_ALERT_WINDOW'
uses-permission: name='android.permission.RECORD_AUDIO'
uses-permission: name='com.tencent.msf.permission.account.sync'
uses-permission: name='android.permission.MODIFY_AUDIO_SETTINGS'
uses-permission: name='android.permission.CAMERA'
uses-permission: name='android.permission.CHANGE_WIFI_STATE'
uses-permission: name='android.permission.ACCESS_WIFI_STATE'
uses-permission: name='android.permission.READ_PHONE_STATE'
uses-permission: name='android.permission.KILL_BACKGROUND_PROCESSES'
uses-permission: name='android.permission.CALL_PHONE'
uses-permission: name='com.android.launcher.permission.READ_SETTINGS'
uses-permission: name='com.android.launcher.permission.UNINSTALL_SHORTCUT'
uses-permission: name='android.permission.PERSISTENT_ACTIVITY'
uses-permission: name='android.permission.WRITE_SETTINGS'
uses-permission: name='android.permission.SEND_SMS'
uses-permission: name='android.permission.READ_SMS'
uses-permission: name='android.permission.GET_TASKS'
uses-permission: name='com.tencent.permission.VIRUS_SCAN'
uses-permission: name='android.permission.READ_LOGS'
uses-permission: name='android.permission.READ_CONTACTS'
uses-permission: name='android.permission.FLASHLIGHT'
uses-permission: name='android.permission.BLUETOOTH'
uses-permission: name='android.permission.BLUETOOTH_ADMIN'
uses-permission: name='android.permission.BROADCAST_STICKY'
uses-permission: name='android.permission.WRITE_CONTACTS'
uses-permission: name='android.permission.WRITE_OWNER_DATA'
uses-permission: name='android.permission.SYSTEM_OVERLAY_WINDOW'
uses-permission: name='android.permission.CHANGE_NETWORK_STATE'
uses-permission: name='com.android.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.android.launcher3.permission.READ_SETTINGS'
uses-permission: name='com.android.launcher3.permission.WRITE_SETTINGS'
uses-permission: name='com.htc.launcher.permission.READ_SETTINGS'
uses-permission: name='com.htc.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.huawei.launcher3.permission.READ_SETTINGS'
uses-permission: name='com.google.android.launcher.permission.READ_SETTINGS'
uses-permission: name='com.google.android.launcher.permission.WRITE_SETTINGS'
uses-permission: name='android.permission.READ_CALENDAR'
uses-permission: name='android.permission.WRITE_CALENDAR'
uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE'
uses-permission: name='com.sec.android.provider.badge.permission.READ'
uses-permission: name='com.sec.android.provider.badge.permission.WRITE'
uses-permission: name='android.permission.GET_ACCOUNTS'
uses-permission: name='android.permission.MANAGE_ACCOUNTS'
uses-permission: name='android.permission.AUTHENTICATE_ACCOUNTS'
uses-permission: name='android.permission.WRITE_CONTACTS'
uses-permission: name='android.permission.READ_SYNC_SETTINGS'
uses-permission: name='android.permission.WRITE_SYNC_SETTINGS'
uses-permission: name='android.permission.DISABLE_KEYGUARD'
uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE'
uses-permission: name='com.qq.qcloud.permission.ACCESS_ALBUM_BACKUP_LIST'
uses-permission: name='com.android.vending.BILLING'
uses-permission: name='android.permission.RESTART_PACKAGES'
uses-permission: name='android.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: label='QQi' icon='R/m/hcw.png'
launchable-activity: name='com.tencent.mobileqq.activity.SplashActivity'  label='QQi' icon=''
uses-library-not-required:'com.google.android.media.effects'
uses-library-not-required:'com.motorola.hardware.frontcamera'
uses-permission: name='com.tencent.photos.permission.DATA'
uses-permission: name='com.tencent.msf.permission.account.sync'
uses-permission: name='com.tencent.music.data.permission'
uses-permission: name='com.tencent.msf.permission.ACCOUNT_NOTICE'
uses-permission: name='android.permission.CHANGE_WIFI_STATE'
uses-permission: name='android.permission.INTERNET'
uses-permission: name='android.permission.ACCESS_WIFI_STATE'
uses-permission: name='android.permission.ACCESS_NETWORK_STATE'
uses-permission: name='android.permission.ACCESS_FINE_LOCATION'
uses-permission: name='android.permission.ACCESS_COARSE_LOCATION'
uses-permission: name='android.permission.CAMERA'
uses-permission: name='android.permission.READ_PHONE_STATE'
uses-permission: name='android.permission.WAKE_LOCK'
uses-permission: name='com.android.launcher.permission.INSTALL_SHORTCUT'
uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE'
uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED'
uses-permission: name='com.tencent.msg.permission.pushnotify'
uses-permission: name='com.tencent.msf.permission.account.sync'
uses-permission: name='android.permission.READ_EXTERNAL_STORAGE'
uses-implied-permission: name='android.permission.READ_EXTERNAL_STORAGE' reason='requested WRITE_EXTERNAL_STORAGE'
uses-permission: name='android.permission.READ_CALL_LOG'
uses-implied-permission: name='android.permission.READ_CALL_LOG' reason='targetSdkVersion < 16 and requested READ_CONTACTS'
uses-permission: name='android.permission.WRITE_CALL_LOG'
uses-implied-permission: name='android.permission.WRITE_CALL_LOG' reason='targetSdkVersion < 16 and requested WRITE_CONTACTS'
feature-group: label=''
  uses-feature-not-required: name='android.hardware.camera'
  uses-feature-not-required: name='android.hardware.camera.autofocus'
  uses-feature-not-required: name='android.hardware.location'
  uses-feature-not-required: name='android.hardware.location.gps'
  uses-feature-not-required: name='android.hardware.location.network'
  uses-feature-not-required: name='android.hardware.telephony'
  uses-feature: name='android.hardware.bluetooth'
  uses-implied-feature: name='android.hardware.bluetooth' reason='requested android.permission.BLUETOOTH permission, requested android.permission.BLUETOOTH_ADMIN permission, and targetSdkVersion > 4'
  uses-feature: name='android.hardware.faketouch'
  uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps'
  uses-feature: name='android.hardware.microphone'
  uses-implied-feature: name='android.hardware.microphone' reason='requested android.permission.RECORD_AUDIO permission'
  uses-feature: name='android.hardware.screen.portrait'
  uses-implied-feature: name='android.hardware.screen.portrait' reason='one or more activities have specified a portrait orientation'
  uses-feature: name='android.hardware.wifi'
  uses-implied-feature: name='android.hardware.wifi' reason='requested 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'
  • Необходимая важная информация:
Язык кода:python
кодКоличество запусков:0
копировать
 name='com.tencent.mobileqqi'
 launchable-activity: name='com.tencent.mobileqq.activity.SplashActivity'
  • еслиaaptПодсказка не найденаприезжать Заказ,需要Пучок它из Установитьсоединение путиприезжатьв переменных системной среды,aaptиз Путь находится в:
Язык кода:python
кодКоличество запусков:0
копировать
D:\android-sdk-windows\build-tools\29.0.3
Вставьте сюда описание изображения
Вставьте сюда описание изображения

6 Подробное объяснение возможностей

6.1 Знакомство с возможностями

  • 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Посмотреть название типа устройства:
Язык кода:python
кодКоличество запусков:0
копировать
C:\Windows\System32>adb 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иappActivity
  • appPackageдаappиз Сумка名;
  • appActivityдаappизимя активного окна;
  • Получение этих двух параметров было объяснено в главе 5.

Есть несколько параметров, я не буду объяснять их по отдельности. Просто посмотрите официальную документацию.

7 официальных примеров

  • Ниже приведен официальный пример,даpythonверсия;
Язык кода:python
кодКоличество запусков:0
копировать
import unittest
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy

capabilities = dict(
    platformName='Android',
    automationName='uiautomator2',
    deviceName='Android',
    appPackage='com.android.settings',
    appActivity='.Settings',
    language='en',
    locale='US'
)

appium_server_url = 'http://localhost:4723'

class TestAppium(unittest.TestCase):
    def setUp(self) -> None:
        self.driver = webdriver.Remote(appium_server_url, options=UiAutomator2Options().load_capabilities(capabilities))

    def tearDown(self) -> None:
        if self.driver:
            self.driver.quit()

    def test_find_battery(self) -> None:
        el = self.driver.find_element(by=AppiumBy.XPATH, value='//*[@text="Battery"]')
        el.click()

if __name__ == '__main__':
    unittest.main()

8 тестовых примеров

  • Здесь мы пишем собственный тестовый пример;
  • прежде чем у нас будет Установитьиспытуемыйпряжка,и получилприезжать Понятноиз Сопутствующая информация;
  • мы начинаемappiumСлужить,прямо в Заказлинейный входappiumВот и все:
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
  • Создайте следующий сценарий:
Язык кода:python
кодКоличество запусков:0
копировать
# -*- coding:utf-8 -*-
# автор:Насекомые без границ
# Дата: 12.12.2023
# Имя файла: test_qq.py
# Функция: appium запускает приложение


from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
import time

capabilities = dict(
    platformName='Android',
    automationName='uiautomator2',
    deviceName='emulator-5554',
    appPackage='com.tencent.mobileqqi',
    appActivity='com.tencent.mobileqq.activity.SplashActivity',
    language='en',
    locale='US'
)


print("start....")
# Создать объект драйвера
appium_server_url = 'http://localhost:4723'
driver = webdriver.Remote(appium_server_url, options=UiAutomator2Options().load_capabilities(capabilities))

# Запустить приложение
print(driver.capabilities)
# driver.launch_app()

time.sleep(1)
print("Уже подключено к симулятору~")

driver.quit()
  • Выполните скрипт:
Язык кода:python
кодКоличество запусков:0
копировать
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из Служитьконец也给出了启动信息:
Язык кода:python
кодКоличество запусков:0
копировать
[AndroidUiautomator2Driver@455c (f190abfc)] Proxying [DELETE /] to [DELETE http://127.0.0.1:8200/session/f9cc13f6-4c4e-4ab5-a2eb-8dfb44f05100] with no body
[AndroidUiautomator2Driver@455c (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+

  • Если эта ошибка возникает во время запуска:
Язык кода:python
кодКоличество запусков:0
копировать
DEPRECATION: celery 5.0.5 has a non-standard dependency specifier pytz>dev. 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.0hurllib3 v2.0 Нужно использовать OpenSSL 1.1.1
  • Решение:
Язык кода:python
кодКоличество запусков:0
копировать
# Либо обновить OpenSSL приезжать 1.1.1 или выше.
# Либо понизить версию urllib3 приезжать v1.x версию, вы можете передать команду pip install urllib3==1.* добиться.
  • В этой статье используется понижение версии urllib3решитьиз,Но это может вызвать другие проблемы с пакетом зависимостей.
Язык кода:python
кодКоличество запусков:0
копировать
pip install urllib3==1.26.15

9.2 UnknownError: An unknown server-side error occurred

  • Если возникает следующая ошибка:
Язык кода:python
кодКоличество запусков:0
копировать
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Служитьизошибка времени;
  • Решение состоит в том, чтобы сначала удалить:
Язык кода:python
кодКоличество запусков:0
копировать
adb uninstall /data/local/tmp/appium_cache/72200c7819db015d5717d05800401c19b35842d5.apk
  • Затем просто используйте команду, чтобы установить ее как есть:
Язык кода:python
кодКоличество запусков:0
копировать
adb  -P 5037 -s emulator-5554 shell pm install -r /data/local/tmp/appium_cache/72200c7819db015d5717d05800401c19b35842d5.apk
Вставьте сюда описание изображения
Вставьте сюда описание изображения

Я участвую в четвертом выпуске специального учебного лагеря Tencent Technology Creation 2023 с эссе, получившими награды. Приходите и разделите приз со мной!

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода