Мини-программа Automation-Appium-WeChat (Java-версия)
Мини-программа Automation-Appium-WeChat (Java-версия)

Апплет WeChat

Аплет WeChat на самом деле представляет собой обычный веб-просмотр.,Но вам нужно открыть страницу отладки Х5 в Вичате для настроек.,Скрипт добавляет параметр androidProcess для выполнения автоматического тестирования.

Примеры в этой главе относятся к версии WeChat для Android (операции в средах Windows и Mac в основном одинаковы, а этот пример относится к среде Windows).

1. Напишите сценарий

1. Сначала получите реальный идентификатор устройства и введите команду adb devices в командной строке.

2. Установите приложение WeChat на реальное устройство, введите команду установки adb install -r для установки или воспользуйтесь мобильным помощником для установки. Пример этой главы: WeChat версии 6.6.5.

3. Откройте страницу отладки X5.

Откройте WeChat, введите debugx5.qq.com в любом окне чата и нажмите, чтобы открыть.

Или отсканируйте QR-код ниже через WeChat, чтобы перейти на страницу отладки X5.

4. На информационной странице установите флажок «Включить функцию отладки инспектора ядра TBS».

5. Затем начните использовать инструмент позиционирования элемента для получения значения атрибута и другой информации об элементе, например, для собственного приложения WeChat вы можете использовать инструмент uiautomatorviewer из Android SDK, чтобы найти элемент. страница не может распознать элементы в веб-просмотре, например отображение android webkit.WebView, поэтому какой инструмент следует использовать для его поиска? Например: JD Shopping.

Далее откройте браузер Chrome на своем ПК и введите адрес доступа chrome://inspect/.

Как показано на рисунке, в данный момент открытым интерфейсом апплета является Webview.

Нажмите на ссылку страницы (там много ссылок, вам нужно щелкнуть одну за другой, чтобы увидеть, какая из них), появится новое окно, показывающее информацию об элементе Webview текущей страницы (из-за проблем с внутренней сетью первая страница для загрузки может потребоваться FANQIANG). Метод позиционирования элемента соответствует Selenium WebDriver.

6. Получить процесс текущего апплета

В WeChat много процессов, и каждая небольшая программа выполняется в отдельном процессе. Откройте мини-программу в WeChat (например: JD Shopping) и проверьте, какой процесс запущен в данный момент.

(1) Чтобы запросить pid, введите adb Shell dumpsys Activity Top findstr ACTIVITY в командной строке.

(2) Чтобы запросить текущий процесс апплета, введите adbshell ps в командной строке, чтобы запросить pid.

Добавлены параметры скрипта:

Язык кода:javascript
копировать
// Запустить Аплет WeChat, чтобы настроить здесь
// PID запроса, ввод командной строки adb shell dumpsys activity top | findstr ACTIVITY
// Запросить текущий Mini процесс программы, ввод командной строки adb shell ps Код запроса
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("androidProcess", "com.tencent.mm:appbrand0");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);

7. Для переключения между NATIVE_APP и WEBVIEW_com.tencent.mm:tools используйте контекстный метод.

8. Код скрипта:

Язык кода:javascript
копировать
package com.test.weixin;
import java.net.URL;
import java.util.Set;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.android.AndroidKeyCode;
/**
 * Апплет WeChat
 *
 * @author wangmcn
 *
 */
public class Xiaochengxv {
       public static void main(String[] args) throws Exception {
              AndroidDriverdriver;
              DesiredCapabilities capabilities = new DesiredCapabilities();

              // Какую систему автоматического тестирования использовать
              // По умолчанию — Appium, Selendroid, UiAutomator2, Espresso для Android или XCUITest для IOS;
              capabilities.setCapability("automationName", "Appium");

              // Какую платформу мобильной операционной системы использовать
              // iOS, Android, FirefoxOS
              capabilities.setCapability("platformName", "Android");

              // Мобильная версия ОС
              capabilities.setCapability("platformVersion", "6.0");

              // Тип используемого мобильного устройства или эмулятора
              // iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android
              // Emulator, Galaxy S4 и т. д.
              // В iOS значение этого ключевого слова должно быть с использованием `instruments -s Одно из доступных имен устройств, полученных с помощью devices`
              // На Android это ключевое слово в настоящее время не работает.
              capabilities.setCapability("deviceName", "honor");

              // Уникальный идентификатор подключенного физического устройства.
              capabilities.setCapability("udid", "MYV0215825000026");

              // Имя пакета приложения Android, которое будет запущено.
              capabilities.setCapability("appPackage", "com.tencent.mm");

              // Android для загрузки из пакета название деятельности
              capabilities.setCapability("appActivity", "com.tencent.mm.ui.LauncherUI");

              // Включите метод ввода Unicode. Установите значение true для ввода китайских символов. Значение по умолчанию — false.
              capabilities.setCapability("unicodeKeyboard", true);

              // После запуска тестов Unicode с набором ключевых слов `unicodeKeyboard` верните клавиатуру в исходное состояние.
              // Если используется отдельно, оно будет игнорироваться, значение по умолчанию — false.
              capabilities.setCapability("resetKeyboard", true);

              // Установите значение true, чтобы перезаписывать сеанс при каждом его запуске, в противном случае при втором запуске будет сообщено об ошибке, и сеанс невозможно будет создать.
              capabilities.setCapability("sessionOverride", true);

              // Не сбрасывайте состояние приложения до этого сеанса.
              // Android Не останавливайте приложение, не очищайте данные приложения и не удаляйте APK.
              // IOS Не уничтожайте и не выключайте SIM-карту после тестирования. Запустите тестовый запуск при любом запуске моделирования или при подключенном устройстве.
              capabilities.setCapability("noReset", true);

              // Выполните полный сброс
              // Android Остановите приложение, очистите данные приложения и удалите APK после тестирования.
              // IOS Удалите приложение после тестирования на реальном устройстве и уничтожьте симулятор после тестирования на эмуляторе.
              capabilities.setCapability("fullReset", false);

              // Установить таймаут команды, единица измерения: секунды
              // Когда период тайм-аута достигнут и новые команды не получены, Appium предположит, что клиент вышел, и автоматически завершит сеанс.
              capabilities.setCapability("newCommandTimeout", 60);

              // Запустить Аплет WeChat, чтобы настроить здесь
              // PID запроса, ввод командной строки adb shell dumpsys activity top | findstr ACTIVITY
              // Запросить текущий Mini процесс программы, ввод командной строки adb shell ps Код запроса
              ChromeOptions options = new ChromeOptions();
              options.setExperimentalOption("androidProcess", "com.tencent.mm:appbrand0");
              capabilities.setCapability(ChromeOptions.CAPABILITY, options);

              driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
              System.out.println("Запустить приложение Вичат");
              Thread.sleep(10000);

              // Нажмите, чтобы узнать
              driver.findElementByXPath("//*[@text='find']").click();

              Thread.sleep(5000);

              // Слайд вниз
              driver.swipe(170, 530, 170, 230, 1000);

              Thread.sleep(2000);

              // Нажмите Мини программа
              driver.findElementByXPath("//*[@text='Мини программа']").click();

              Thread.sleep(2000);

              // Нажмите на JD.com, чтобы совершить покупку
              driver.findElementByXPath("//*[contains(@text, 'JD Shopping')]").click();

              Thread.sleep(8000);

              Setcontexts = driver.getContextHandles();
              for (String context : contexts) {
                     // Распечатайте его, чтобы увидеть, какие контексты существуют.
                     System.out.println(context);
              }
              // Переключитесь в режим веб-просмотра, чтобы найти веб-элементы.
              driver.context("WEBVIEW_com.tencent.mm:tools");

              // Получить дескриптор текущего окна
              String Handle = driver.getWindowHandle();
              System.out.println("Текущий дескриптор: " + Handle);

              // Получить дескрипторы всех окон
              SetHandles = driver.getWindowHandles();
              for (String h : Handles) {
                     if (h.equalsIgnoreCase(Handle)) {
                            System.out.println("Игнорировать ручки: " + h);
                     } else {
                            driver.switchTo().window(h);
                            System.out.println("Перейти к ручке: " + h);
                            // Распечатать исходный код текущей веб-страницы
                            System.out.println("дескриптор " + h + " Исходный код веб-страницы: " + driver.getPageSource());
                     }
              }

              // Нажмите, чтобы получить купон
              driver.findElementByXPath("//wx-view[text()='Получить купон']").click();

              Thread.sleep(5000);

              // возвращаться
              driver.pressKeyCode(AndroidKeyCode.BACK);

              // Переключиться в режим приложения
              driver.context("NATIVE_APP");

              Thread.sleep(5000);

              // Нажмите, чтобы классифицировать
              driver.findElementByXPath("//android.widget.TextView[@text='Классификация']").click();              Thread.sleep(5000);
              driver.quit();
       }
}

2. Выполните скрипт

1. Запускаем сервис Appium (выбираем любой)

Способ 1: запустить сервер Appium

Откройте командную строку и введите appium --address 127.0.0.1 --port 4723 --no-reset --session-override

Как показано на рисунке, служба Appium запущена.

Способ 2: откройте рабочий стол Appium

Открыть рабочий стол Appium

Если IP-адрес и порт службы указаны по умолчанию, нажмите «Запустить сервер v1.6.5», чтобы запустить службу Appium, как показано на рисунке.

2. Выполните тестовый скрипт, этапы выполнения скрипта:

(1) Запустите приложение WeChat.

(2) Нажмите, чтобы узнать

(3) Сдвинуть вниз

(4) Нажмите на мини-программу.

(5) Нажмите JD.com, чтобы совершить покупку.

(6) Распечатайте NATIVE_APP и WEBVIEW тестируемого приложения.

Язык кода:javascript
копировать
NATIVE_APP
WEBVIEW_com.tencent.mm:appbrand1
WEBVIEW_com.tencent.mm:appbrand0
WEBVIEW_com.tencent.mm:support
WEBVIEW_com.tencent.mm:tools
WEBVIEW_com.huawei.wifiprobqeservice
WEBVIEW_com.iflytek.ringdiyclient

(7) Переключитесь на WEBVIEW_com.tencent.mm:tools (режим веб-просмотра), чтобы найти веб-элементы.

(8) Получить дескриптор текущего окна

(9) Получите дескрипторы всех окон.

Поскольку существует несколько дескрипторов, вам нужно перейти к правильному дескриптору, чтобы управлять элементами страницы, и каждый раз, когда это выполняется, значение дескриптора изменяется и не фиксируется.

Первое исполнение:

Текущий дескриптор: CDwindow-a7bc4687-2728-4d5b-af91-c310951d7247.

Игнорировать дескриптор: CDwindow-a7bc4687-2728-4d5b-af91-c310951d7247

Перейти к дескриптору: CDwindow-ac347a13-7a97-4c96-8867-901e1b8888f3

Второе исполнение:

Текущий дескриптор: CDwindow-8b216eef-9ccc-425b-af36-291ff4d98cc8

Игнорировать дескриптор: CDwindow-8b216eef-9ccc-425b-af36-291ff4d98cc8

Перейти к дескриптору: CDwindow-27615809-988a-4533-a441-01ab63e0d968.

(10) Распечатайте исходный код текущей веб-страницы.

(11) Нажмите, чтобы получить купоны

(12) Возврат

(13) Переключитесь на NATIVE_APP (режим приложения)

(14) Нажмите, чтобы классифицировать

(15) Закройте приложение WeChat.

После завершения выполнения скрипта на консоли выводится информация:

3. При выполнении тестового скрипта перехода в режим WebView могут возникнуть некоторые ошибки. Исключая некорректное позиционирование элементов, большая часть ошибок вызвана несоответствием версий WebView и драйвера.

Например, сообщается о следующей ошибке, указывающей на то, что при обработке команды произошла неизвестная ошибка на стороне сервера. Исходная ошибка: исключение сеанса не создано.

from unknown error: Runtime.executionContextCreated has invalid 'context': {"auxData":{"frameId":"22596.1","isDefault":true},"id":1,"name":"","origin":"://"}

Решение состоит в том, чтобы сопоставить версию WebView с версией драйвера и позволить драйверу перейти на более раннюю версию или обновиться.

Итак, как узнать, совпадают ли WebView и драйвер?

Откройте браузер Chrome на ПК и введите адрес доступа chrome://inspect/.

В реальной машине с udid MYV0215825000026,Откройте страницу приложения WeChatwebview, которой вы хотите управлять.,В настоящее время вы можете увидеть ссылку для доступа в браузере Chrome на ПК.,Как показано на картинке,Номер версии WebView на реальной машине — 57.0.2987.132.

Теперь, когда известен номер версии WebView тестируемого приложения, следующим шагом будет определение сопоставляемой версии драйвера и ее соответствия версии chromedriver.

Адрес загрузки исторической версии Chromedriver: https://chromedriver.storage.googleapis.com/index.html.

Соответствующий список версий Chrome, поддерживаемых версией chromedriver:

Выберите указанную версию chromedriver (на фото: версия WebView — 57.0.2987.132, поэтому выбрана версия chromedriver 2.28). Вы можете скачать указанный chromedriver для разных платформ (Win, Mac, Linux).

После загрузки указанного chromedriver дважды щелкните, чтобы просмотреть номер версии драйвера.

Где следует разместить хромдрайвер? В зависимости от службы Appium, которую вы хотите использовать, скопируйте ее в соответствующий каталог Appium Server или Appium Desktop. После завершения копирования его можно использовать в обычном режиме.

В среде Windows:

Путь chromedriver сервера Appium, например:

C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win\chromedriver.exe

Путь chromedriver Appium Desktop, например:

C:\Users\Administrator\AppData\Local\Programs\appium-desktop\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win\chromedriver.exe

В среде Mac:

Обратите внимание, что когда служба Appium использует Appium Server, при выполнении сценария сообщается об ошибке: При обработке команды произошла неизвестная ошибка на стороне сервера. Исходная ошибка: попытка использовать двоичный файл chromedriver по пути /usr/local/lib/node_modules. /appium/node_modules/appium-chromedriver/chromedriver/mac/chromedriver, но его не существует!

Это означает, что драйвер chromedriver не найден. Создайте соответствующий каталог в соответствии с сообщением об ошибке и скопируйте драйвер chromedriver в указанное место.

Путь chromedriver сервера Appium, например:

/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/chromedriver/mac/chromedriver

Путь chromedriver Appium Desktop, например:

/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-chromedriver/chromedriver/mac/chromedriver

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