Публичный аккаунт WeChat
Публичный аккаунт WeChat на самом деле представляет собой обычный веб-просмотр.,Но вам нужно открыть страницу отладки Х5 в Вичате для настроек.,Скрипт добавляет параметр androidProcess для выполнения автоматического тестирования.
Примеры в этой главе относятся к версии WeChat для Android (операции в средах Windows и Mac в основном одинаковы, а этот пример относится к среде Windows).
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. Итак, какой инструмент следует использовать для его поиска? Например: войдите в официальную учетную запись Gome Butler, нажмите на службу бронирования и перейдите на страницу службы дворецкого. Эта страница является страницей веб-просмотра.
Далее откройте браузер Chrome на своем ПК и введите адрес доступа chrome://inspect/.
Как показано на рисунке, в настоящее время открытым интерфейсом официального аккаунта является Webview.
Нажмите на ссылку страницы (есть несколько ссылок, щелкните одну за другой, чтобы увидеть какую), появится новое окно, показывающее информацию об элементе Webview текущей страницы (из-за проблем с внутренней сетью может потребоваться загрузка первой страницы). ФАНЦЯН). Метод позиционирования элемента соответствует Selenium WebDriver.
6. Процесс получения текущего официального аккаунта
Откройте общедоступную учетную запись в WeChat (например: Gome Butler, щелкните, чтобы войти на страницу веб-просмотра для тестирования) и проверьте, какой процесс запущен в данный момент.
(1) Чтобы запросить pid, введите adb Shell dumpsys Activity Top findstr ACTIVITY в командной строке.
(2) Чтобы запросить текущий официальный процесс учетной записи, введите adbshell ps в командной строке, чтобы запросить pid.
Добавлены параметры скрипта:
# запускать Публичный аккаунт WeChat, чтобы настроить здесь
# PID запроса, ввод командной строки adb shell dumpsys activity top | findstr ACTIVITY
# Чтобы запросить текущий процесс общедоступной учетной записи, введите командную строку adb shell ps Код запроса
desired_caps['chromeOptions'] = {'androidProcess': 'com.tencent.mm:tools'}
7. Для переключения между NATIVE_APP и WEBVIEW_com.tencent.mm:tools используйте метод switch_to.context.
8. Код скрипта:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from appium import webdriver
import time
"""
Публичный аккаунт WeChat
"""
# Определите параметры, необходимые для запуска устройства
desired_caps = {}
# Какую систему автоматического тестирования использовать
# По умолчанию — Appium, Selendroid, UiAutomator2, Espresso для Android или XCUITest для IOS;
desired_caps['automationName'] = 'Appium'
# Какую платформу мобильной операционной системы использовать iOS, Android, FirefoxOS
desired_caps['platformName'] = 'Android'
# Мобильная версия ОС
desired_caps['platformVersion'] = '6.0'
# Тип используемого мобильного устройства или эмулятора
# iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4 и т. д.
# В iOS значение этого ключевого слова должно быть с использованием `instruments -s Одно из доступных имен устройств, полученных с помощью devices`
# На Android это ключевое слово в настоящее время не работает.
desired_caps['deviceName'] = 'honor'
# Уникальный идентификатор подключенного физического устройства.
desired_caps['udid'] = 'MYV0215825000026'
# Имя пакета приложения Android, которое будет запущено.
desired_caps['appPackage'] = 'com.tencent.mm'
# Android для загрузки из пакета название деятельности
desired_caps['appActivity'] = 'com.tencent.mm.ui.LauncherUI'
# Включите метод ввода Unicode. Установите значение true для ввода китайских символов. Значение по умолчанию — false.
desired_caps['unicodeKeyboard'] = True
# После запуска тестов Unicode с набором ключевых слов `unicodeKeyboard` верните клавиатуру в исходное состояние.
# Если используется отдельно, оно будет игнорироваться, значение по умолчанию — false.
desired_caps['resetKeyboard'] = True
# Не сбрасывайте состояние приложения до этого сеанса.
# Android Не останавливайте приложение, не очищайте данные приложения и не удаляйте APK.
# IOS Не уничтожайте и не выключайте SIM-карту после тестирования. Запустите тестовый запуск при любом запуске моделирования или при подключенном устройстве.
desired_caps['noReset'] = True
# Выполните полный сброс
# Android Остановите приложение, очистите данные приложения и удалите APK после тестирования.
# IOS Удалите приложение после тестирования на реальном устройстве и уничтожьте симулятор после тестирования на эмуляторе.
desired_caps['fullReset'] = False
# Установить таймаут команды, единица измерения: секунды
# Когда период тайм-аута достигнут и новые команды не получены, Appium предположит, что клиент вышел, и автоматически завершит сеанс.
desired_caps['newCommandTimeout'] = 60
# запускать Публичный аккаунт WeChat, чтобы настроить здесь
# PID запроса, ввод командной строки adb shell dumpsys activity top | findstr ACTIVITY
# Чтобы запросить текущий процесс общедоступной учетной записи, введите командную строку adb shell ps Код запроса
desired_caps['chromeOptions'] = {'androidProcess': 'com.tencent.mm:tools'}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
print("Запустить приложение Вичат")
time.sleep(10)
# Нажмите на «Иди, дворецкий».
driver.find_element_by_xpath("//*[@text='Gome Butler']").click()
time.sleep(5)
# Нажмите, чтобы заказать услугу
driver.find_element_by_xpath("//*[contains(@text, 'Служба бронирования')]").click()
time.sleep(5)
contexts = driver.contexts
for context in contexts:
# Распечатайте его, чтобы увидеть, какие контексты существуют.
print(context)
# Переключитесь в режим веб-просмотра, чтобы найти веб-элементы.
driver.switch_to.context("WEBVIEW_com.tencent.mm:tools")
# Получить дескриптор текущего окна
Handle = driver.current_window_handle
print("Текущий дескриптор: " + Handle)
# Получить дескрипторы всех окон
Handles = driver.window_handles
for h in Handles:
if h == Handle:
print("Игнорировать ручки: " + h)
else:
driver.switch_to.window(h)
print("Перейти к ручке: " + h)
# Распечатать исходный код текущей веб-страницы
print("обработка " + h + " Исходный код веб-страницы: " + driver.page_source)
break
time.sleep(2)
# Нажмите на переработку мобильных телефонов.
driver.find_element_by_xpath("//a[text()='Утилизация мобильных телефонов']").click()
time.sleep(10)
# возвращаться
driver.keyevent(4)
time.sleep(5)
# возвращаться
driver.keyevent(4)
time.sleep(5)
# Переключиться в режим приложения
driver.switch_to.context("NATIVE_APP")
# Нажмитевозвращаться
driver.find_element_by_xpath("//android.widget.ImageView[@content-desc='возвращаться']").click()
time.sleep(2)
driver.quit()
1. Запускаем сервис Appium (выбираем любой)
Способ 1: запустить сервер Appium
Откройте командную строку и введите appium --address 127.0.0.1 --port 4723 --no-reset --session-override
Как показано на рисунке, служба Appium запущена.
Способ 2: откройте рабочий стол Appium
Открыть рабочий стол Appium
Если IP-адрес и порт службы указаны по умолчанию, нажмите «Запустить сервер v1.8.0», чтобы запустить службу Appium, как показано на рисунке.
2. Выберите сценарий и щелкните правой кнопкой мыши «Выполнить», чтобы выполнить тестовый сценарий.
Этапы выполнения скрипта:
(1) Запустите приложение WeChat.
(2) Нажмите «Иди, дворецкий».
(3) Нажмите, чтобы зарезервировать услугу.
(4) Распечатайте NATIVE_APP и WEBVIEW тестируемого приложения.
NATIVE_APP
WEBVIEW_com.huawei.wifiprobqeservice
WEBVIEW_com.tencent.mm:appbrand0
WEBVIEW_com.tencent.mm:tools
WEBVIEW_com.iflytek.ringdiyclient
WEBVIEW_com.tencent.mm:support
(5) Переключитесь на WEBVIEW_com.tencent.mm:tools (режим веб-просмотра), чтобы найти веб-элементы.
(6) Получить дескриптор текущего окна
(7) Получите дескрипторы всех окон.
Поскольку существует несколько дескрипторов, вам нужно перейти к правильному дескриптору, чтобы управлять элементами страницы, и каждый раз, когда это выполняется, значение дескриптора изменяется и не фиксируется.
Первое исполнение:
Текущий дескриптор: CDwindow-385a779c-77c1-4d29-915c-d1f5e0c5d3d2
Игнорировать дескриптор: CDwindow-385a779c-77c1-4d29-915c-d1f5e0c5d3d2
Перейти к дескриптору: CDwindow-2d8c2079-6e9b-441d-a524-3092494f443c
Второе исполнение:
Текущий дескриптор: CDwindow-71f733f6-34f8-4476-a5b6-498ab61ca8c9
Игнорировать дескриптор: CDwindow-71f733f6-34f8-4476-a5b6-498ab61ca8c9
Перейти к дескриптору: CDwindow-b2ad0ac9-3b82-49fb-ba54-17d69df4e68e
(8) Распечатайте исходный код текущей веб-страницы.
(9) Нажмите «Утилизация мобильных телефонов».
(10) Возврат
(11) Возврат
(12) Переключитесь на NATIVE_APP (режим приложения)
(13) Нажмите, чтобы вернуться
(14) Закройте приложение 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\admin\AppData\Roaming\npm\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win\chromedriver.exe
Путь chromedriver Appium Desktop, например:
C:\Users\admin\AppData\Local\Programs\Appium\resources\app\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-chromedriver/chromedriver/mac/chromedriver