Базовое использование автоматического тестирования Python Appium Android - Phone Spider
Базовое использование автоматического тестирования Python Appium Android - Phone Spider

Базовое использование Python Appium для Android при автоматизированном тестировании

Совет: Здесь вы можете добавить оглавление всех статей серии. Оглавление необходимо добавлять вручную. Например: Глава 1 Python Введение в машинное обучение: использование панд


Предисловие

Например: с постоянным развитием искусственного интеллекта технология машинного обучения становится все более важной. Многие люди начали изучать машинное обучение.


Совет: Ниже приведен текст этой статьи. Следующие случаи приведены для справки.

1. Установка среды

1.1 Модуль установки Python Pip

pip install Appium-Python-Client -i https://pypi.tuna.tsinghua.edu.cn/simple

1.2 Sdk, Jdk, загрузка сетевого диска Appium-рабочего стола

Ссылка: https://pan.baidu.com/s/19C9fGmoXne8DgfXhrTB2TQ

Код извлечения: кгвб

1.3 Справочная документация

https://www.byhy.net/tut/auto/appium/01/

2. Андроид Sdk uiautomateviewer анализировать&позицияAppэлементы интерфейса

2.1 Этапы запуска

Найдите инструменты/bin/uiautomatorviewer.bat в каталоге SDK и дважды щелкните, чтобы запустить;

2.2 Часто задаваемые вопросы

Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist!

2.2.1 Решение 1:

Обычно он конфликтует с Appium Desktop Appium. Просто закройте Appium Desktop Appium и снова получите интерфейс приложения;

2.2.2 Решение 2:

Запустите командную панель: adb reconnect После запуска снова нажмите «Подключиться».

2.3 Анализ атрибута идентификатора ресурса часто используется для позиционирования элемента.

resource-id=tv.danmaku.bili:id/search_src_text,Позиционирование идентификатора элемента можно выполнить через search_src_text.,Вы также можете написать полностью(tv.danmaku.bili:id/search_src_text)позиция;

Язык кода:javascript
копировать
from selenium.webdriver.common.by import By
driver.find_element_by_id('search_src_text')
driver.find_element(By.ID, 'search_src_text')

2.4. Анализ атрибутов границ может использоваться для позиционирования элемента.

границы = [175,88][887,171], указывающие ширину и высоту верхнего левого угла элемента, а также позиции граничных пикселей ширины и высоты нижнего правого угла элемента;

2.5 Анализ атрибутов текста может использоваться для оценки текста.

text=appium, содержимое внутри компонента;

2.6 анализ атрибутов content-desc: Текст, описывающий функцию компонента.

Элементы можно позиционировать на основе текста.

Язык кода:javascript
копировать
from appium.webdriver.common.appiumby import AppiumBy
driver.find_element по идентификатору доступности('поискзапрос')
driver.find_element(AppiumBy.ACCESSIBILITY_ID, 'поискзапрос')

2.7 Расположение элемента XPath

Конкретная операция описана ниже. Appium Desktop Appium Проверять;

2.8 Позиционирование элемента UiSelector, позиционирование по нескольким условиям

ссылка Вот официальная документация Google Android: https://developer.android.google.cn/training/testing/ui-automator

UiSelector часто используемые методы выбора элементов

  • text("поискзапрос"), вы можете найти позиционирование по атрибуту text элемента элемента
  • textContains("python"), позиционирование в зависимости от того, какие строки содержит текст.
  • textmatch(), вы можете использовать регулярные выражения для поиска
  • className("android.widget.TextView"), позиционируется на основе имени компонента.
  • resourcesId("tv.danmaku.bili:id/search_src_text"), позиционируется на основе идентификатора компонента.
  • index(1), позиционирование основано на индексе позиции в родительском элементе, индекс начинается с 1, аналогично *[n] в xpath;
  • экземпляр(0), значение определяется на основе нижнего индекса в результате позиционированного элемента, а нижний индекс рассчитывается от 0;
  • childSelector(new UiSelector().className("android.widget.TextView")), продолжить поиск дочерних элементов в позиционированном элементе;
Язык кода:javascript
копировать
from appium.webdriver.common.appiumby import AppiumBy
code = 'new className("android.widget.TextView").resourceId("tv.danmaku.bile:id/search_src_text")'
result = driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, code)
childSelectorCode = 'new UiSelector().resourceId("tv.danmaku.bili:id/search_src_text").childSelector(new UiSelector().className("android.widget.TextView"))'
result = driver.find_elements_by_uiautomator(childSelectorCode);

Обратите внимание на приведенную выше переменную кода, которая содержит код Java. В коде Java можно использовать только двойные кавычки, поэтому будьте внимательны при написании.

три, Appium Desktop Appium анализировать&позицияAppэлементы интерфейса

3.1 Этапы запуска

1. Откройте Appium, нажмите «Запустить сервер», запустите программу и нажмите лупу в правом верхнем углу.

2. Добавьте конфигурацию

Язык кода:javascript
копировать
# Конфигурации, необходимые для кода Python
desired_caps = {
  'platformName': 'Android',  # провереносотовый телефон Android
  'platformVersion': '10',  # сотовый Android-версия телефона
  'deviceName': 'xxx', # Имя устройства, Android сотовый телефон можно заполнить по вашему желанию
  'appPackage': 'tv.danmaku.bili',  # Запустить приложение Имя пакета
  'appActivity': '.MainActivityV2',  # Название начала действия
  'unicodeKeyboard': True,  # Используйте встроенный метод ввода и заполняйте True при вводе китайского языка.
  'resetKeyboard': True,  # После выполнения программы восстановите исходный метод ввода
  'noReset': True,  # Не перезагружайте приложение
  'newCommandTimeout': 6000,  # Максимальный таймаут запроса
  'automationName' : 'UiAutomator2'
  # 'app': r'd:\apk\bili.apk',
}
Язык кода:javascript
копировать
// Appium Desktop  Appium Записать конфигурацию элемента интерфейса приложения
{
  "platformName": "Android",
  "platformVersion": "10",
  "deviceName": "xxx",
  "appPackage": "tv.danmaku.bili",
  "appActivity": ".MainActivityV2",
  "unicodeKeyboard": true,
  "resetKeyboard": true,
  "noReset": true,
  "newCommandTimeout": 6000,
  "automationName": "UiAutomator2"
}

3.2 Получение элементов интерфейса

3.3 В Аппиуме Desktop Appium в соответствии сxpathэлемент прогрессии синтаксисапоиск&позиция

1. Позиционирование по классу нужно прописывать полностью: //android.widget.TextView 2. Найдите компонент по идентификатору ресурса: //*[@resource-id="tv.danmaku.bili:id/action_search"] 3、в соответствии сэлемент Узлы относительныпозиция:позицияПопулярныйэлемент;

Синтаксис позиционирования: //*[@resource-id=’tv.danmaku.bili:id/tabs’]//android.view.ViewGroup[3]

Язык кода:javascript
копировать
from appium.webdriver.common.appiumby import AppiumBy
driver.find_element(AppiumBy.XPATH, "//*[@resource-id='tv.danmaku.bili:id/tabs']//android.view.ViewGroup[3]")
driver.find_element_by_xpath("//*[@resource-id='tv.danmaku.bili:id/tabs']//android.view.ViewGroup[3]")

4. Вопросы позиционирования

4.1 element & elements

Следующее объяснение относится не только к методу позиционирования xpath, но также включает все методы с элементом слова. find_element_by_xpath, без s означает поиск первого совпавшего элемента, обычно используемого для поиска; find_elements_by_xpath, где s означает позиционирование всех совпадений, обычно используется для получения значения данных элемента;

5. Обычный код Python

Язык кода:javascript
копировать
from appium import webdriver
from selenium.webdriver.common.by import By
from appium.webdriver.extensions.android.nativekey import AndroidKey


"""
    Получить приложение информация о деятельности
    Откройте целевое приложение для сотового текущий активный экран телефона, Открыть cmd Введите следующую команду получатьсотовый телефон Информация о запущенном приложении
        adb shell dumpsys activity recents | find "intent={"
    Первая строка сотовая телефон Текущая информация о приложении, извлечение информации cmp, .MainActivityV2
        cmp=tv.danmaku.bili/.MainActivityV2
    
"""

desired_caps = {
  'platformName': 'Android',  # провереносотовый телефон Android
  'platformVersion': '10',  # сотовый Android-версия телефона
  'deviceName': 'xxx',  # Имя устройства, Android сотовый телефон можно заполнить по вашему желанию
  'appPackage': 'tv.danmaku.bili',  # Запустить приложение Имя пакета
  'appActivity': '.MainActivityV2',  # Название начала действия
  'unicodeKeyboard': True,  # Используйте встроенный метод ввода и заполняйте True при вводе китайского языка.
  'resetKeyboard': True,  # После выполнения программы восстановите исходный метод ввода
  'noReset': True,  # Не перезагружайте приложение
  'newCommandTimeout': 6000,
  'automationName': 'UiAutomator2'
  # 'app': r'd:\apk\bili.apk',
}

# Подключить Аппиум Сервер, инициализация среды автоматизации
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

# Установить время ожидания по умолчанию
driver.implicitly_wait(5)

# Если есть интерфейс «Защита молодежи», нажмите «Я понял».
iknow = driver.find_elements(By.ID, "text3")
if iknow:
    iknow.click()

# Найдите поле позиции поиска в соответствии с идентификатором и нажмите
driver.find_element(By.ID, 'expand_search').click()

# Найдите поле ввода поиска по идентификатору и нажмите
sbox = driver.find_element(By.ID, 'search_src_text')
sbox.send_keys('Белая луна и черное перо')
# Введите клавишу Enter для подтверждения поиска
driver.press_keycode(AndroidKey.ENTER)

# Выбрать (нацелить) все заголовки видео
eles = driver.find_elements(By.ID, 'title')

for ele in eles:
    # Распечатать заголовок
    print(ele.text)

input('**** Press to quit..')
driver.quit()
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose