Автоматизация-Appium-First Demo-Hybrid (Java Edition)
Автоматизация-Appium-First Demo-Hybrid (Java Edition)

Первый демо-микс

Что такое гибрид?

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

Мобильное приложение и веб-представление принадлежат двум разным контекстам. Контекст мобильного приложения по умолчанию — «NATIVE_APP», а контекст веб-представления по умолчанию — «Имя процесса WEBVIEW_Tested». При тестировании содержимого веб-страницы в Webview вам необходимо переключиться на контекст Webview.

Глава 1 Android

1.1 Создать проект

1. Запустите Затмение,правая кнопка мышиNew--->Project。

2. Создайте проект Java и выберите «Проект Java» в каталоге Java.

3. Введите имя проекта (например: My_Appium_Demo) и нажмите «Готово».

4. Создайте папку lib для хранения пакета jar. Скопируйте пакеты jar Appium Clients и Selenium jar в папку.

5. Создайте папку приложений для хранения приложений. Скопируйте в папку приложения Bangbang.apk и Qunar.apk.

6. Выберите скопированный Appium Clients jar и селен jar, щелкните правой кнопкой мыши «Создать» Path--->Add to Build Path。

7、Appium Clients jar и селен Пакет jar упоминается в проекте.

8. Выберите исходную папку src.,правая кнопка мышиNew--->Class,Создать класс Java,Введите имя пакета (например: com.test.demo), имя класса (например: пример симулятора — Android_Hybrid_Simulator).,Пример реальной машины — Android_Hybrid_RealMachine),Нажмите «Готово», чтобы завершить.

9. Создан первый Демо-проект Android-гибрид (симулятор/реальное устройство).

1.2 Написание сценариев

1.2.1 Эмулятор

1. Пример симулятора в этой главе использует Genymotion. Сначала откройте симулятор Genymotion и откройте указанную версию Android.

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

Как показано на рисунке, найден только один симулятор. Добавлять этот параметр в скрипт не нужно.

capabilities.setCapability("udid", " 192.168.113.101:5555");

Вы можете указать этот эмулятор для выполнения.

Если устройств несколько, как показано на рисунке, обнаружено 2 устройства (1 симулятор 192.168.113.101:5555, 1 реальная машина MYV0215825000026), этот параметр необходимо добавить в скрипт.

capabilities.setCapability("udid", "192.168.113.101:5555");

Укажите, что этот симулятор будет выполняться при выполнении теста.

3. В симуляторе нет приложения для тестирования. Вы можете установить его в симулятор перед выполнением автоматического тестирования. Введите команду установки adb install -r для установки или используйте мобильный помощник для установки или напрямую перетащите .apk. Перетащите его в эмулятор для установки.

4. В симуляторе нет приложения для тестирования, и я хочу установить его автоматически при выполнении автоматического теста. Вам необходимо добавить в скрипт следующий код:

Язык кода:javascript
копировать
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "app");
File app = new File(appDir, "Bangbang.apk");

// Локальный абсолютный путь или удаленный путь, по которому находится файл `.ipa` или `.apk`, либо это может быть `.zip`, включающий один из двух.
// Appium сначала попытается установить приложение, соответствующее пути, на соответствующую реальную машину или симулятор.
// Для Android, если вы укажете `app-package` и `app-activity`, вам не нужно указывать `app`.
// Например /abs/path/to/my.apk or http://myapp.com/app.ipa
capabilities.setCapability("app", app.getAbsolutePath());

5. Если в симуляторе есть приложение, которое нужно протестировать, вам не нужно устанавливать тестируемое приложение каждый раз при выполнении тестового сценария. Вам нужно только указать appPackage и appActivity.

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

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

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

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

7. Для переключения между NATIVE_APP и WEBVIEW_имя тестируемого процесса используйте контекстный метод.

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

Язык кода:javascript
копировать
package com.test.demo;
import java.io.File;
import java.net.URL;
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
/**
 * Android-гибридный эмулятор
 *
 * @author wangmcn
 *
 */
public class Android_Hybrid_Simulator {
       public static void main(String[] args) throws Exception {
              AndroidDriverdriver;
              File classpathRoot = new File(System.getProperty("user.dir"));
              File appDir = new File(classpathRoot, "app");
              File app = new File(appDir, "Bangbang.apk");
              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", "192.168.113.101:5555");

              // Локальный абсолютный путь или удаленный путь, по которому находится файл `.ipa` или `.apk`, либо это может быть `.zip`, включающий один из двух.
              // Appium сначала попытается установить приложение, соответствующее пути, на соответствующую реальную машину или симулятор.
              // Для Android, если вы укажете `app-package` и `app-activity`, вам не нужно указывать `app`.
              // Например /abs/path/to/my.apk or http://myapp.com/app.ipa
              capabilities.setCapability("app", app.getAbsolutePath());

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

              // Android для загрузки из пакета название деятельности
              capabilities.setCapability("appActivity", "com.xiaoV.BWallet.yklogin.YkSplashActivity");

              // Включите метод ввода 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);

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

              // Появится окно с подсказкой о новой версии, щелкните его и повторите попытку.
              driver.findElement(By.id("com.xiaoV.BWalletBeta:id/bt_update_id_cancel")).click();

              Thread.sleep(2000);

              // Нажмите на меню слева
              driver.findElement(By.id("com.xiaoV.BWalletBeta:id/iv_left_image")).click();

              Thread.sleep(2000);

              // Нажмите Справочный центр.
              driver.findElement(By.id("com.xiaoV.BWalletBeta:id/helpcenter")).click();

              Thread.sleep(5000);

              SetcontextNames = driver.getContextHandles();
              for (String contextName : contextNames) {
                     // Распечатайте, является ли тестируемое приложение NATIVE_APP или WEBVIEW. Если оно имеет оба, это гибридное приложение.
                     System.out.println(contextName);
                     if (contextName.contains("WEBVIEW_com.xiaoV.BWalletBeta")) {
                            // Переключитесь в режим веб-просмотра, чтобы найти веб-элементы.
                            driver.context(contextName);
                            System.out.println("Переключиться на веб-просмотр:" + contextName);
                     }
              }

              Thread.sleep(2000);

              // Распечатать исходный код текущей веб-страницы
              System.out.println(driver.getPageSource());

              Thread.sleep(2000);

              // Нажмите о займе денег
              driver.findElement(By.xpath(".//*[@id='question-list']/section/div[1]/ul/li[2]")).click();

              Thread.sleep(2000);

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

              System.out.println("Переключиться на приложение: NATIVE_APP");
              Thread.sleep(2000);

              // Нажмите, чтобы вернуться
              driver.findElement(By.id("com.xiaoV.BWalletBeta:id/iv_left_image")).click();

              Thread.sleep(2000);
              driver.quit();
       }
}

1.2.2 Реальная машина

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

2. Если на реальном устройстве нет приложения, которое нужно протестировать, вы можете установить его на устройство перед выполнением автоматического тестирования. Введите команду установки adb install -r для установки или используйте мобильный помощник для установки.

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

Язык кода:javascript
копировать
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "app");
File app = new File(appDir, "Qunar.apk");

// Локальный абсолютный путь или удаленный путь, по которому находится файл `.ipa` или `.apk`, либо это может быть `.zip`, включающий один из двух.
// Appium сначала попытается установить приложение, соответствующее пути, на соответствующую реальную машину или симулятор.
// Для Android, если вы укажете `app-package` и `app-activity`, вам не нужно указывать `app`.
// Например /abs/path/to/my.apk or http://myapp.com/app.ipa
capabilities.setCapability("app", app.getAbsolutePath());

4. Если на реальном устройстве необходимо протестировать приложение, вам не нужно устанавливать тестируемое приложение каждый раз при выполнении тестового сценария. Вам нужно только указать appPackage и appActivity.

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

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

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

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

6. Для переключения между NATIVE_APP или WEBVIEW_имя тестируемого процесса используйте контекстный метод.

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

Язык кода:javascript
копировать
package com.test.demo;
import java.io.File;
import java.net.URL;
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
/**
 * Android-гибрид-реальная машина
 *
 * @author wangmcn
 *
 */
public class Android_Hybrid_RealMachine {
       public static void main(String[] args) throws Exception {
              AndroidDriverdriver;
              File classpathRoot = new File(System.getProperty("user.dir"));
              File appDir = new File(classpathRoot, "app");
              File app = new File(appDir, "Qunar.apk");
              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");

              // Локальный абсолютный путь или удаленный путь, по которому находится файл `.ipa` или `.apk`, либо это может быть `.zip`, включающий один из двух.
              // Appium сначала попытается установить приложение, соответствующее пути, на соответствующую реальную машину или симулятор.
              // Для Android, если вы укажете `app-package` и `app-activity`, вам не нужно указывать `app`.
              // Например /abs/path/to/my.apk or http://myapp.com/app.ipa
              capabilities.setCapability("app", app.getAbsolutePath());

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

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

              // Включите метод ввода 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);

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

              // нажмите на мой
              driver.findElement(By.id("com.mqunar.atom.alexhome:id/atom_alexhome_uc_default")).click();

              SetcontextNames = driver.getContextHandles();
              for (String contextName : contextNames) {
                     // Распечатайте, является ли тестируемое приложение NATIVE_APP или WEBVIEW. Если оно имеет оба, это гибридное приложение.
                     System.out.println(contextName);
                     if (contextName.contains("WEBVIEW_com.Qunar")) {
                            // Переключитесь в режим веб-просмотра, чтобы найти веб-элементы.
                            driver.context(contextName);
                            System.out.println("Переключиться на веб-просмотр:" + contextName);
                     }
              }

              Thread.sleep(2000);

              // Распечатать исходный код текущей веб-страницы
              System.out.println(driver.getPageSource());

              Thread.sleep(2000);

              // Нажмите, чтобы вернуться
              driver.findElement(By.className("yo-ico")).click();

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

              System.out.println("Переключиться на приложение: NATIVE_APP");
              Thread.sleep(2000);

              // Нажмите на домашнюю страницу-билеты
              driver.findElement(By.id("com.mqunar.atom.alexhome:id/atom_alexhome_mod_flight")).click();

              Thread.sleep(8000);
              driver.quit();
       }
}

1.3 Выполнить скрипт

1.3.1 Эмулятор

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. Запустите тестовый скрипт, щелкните правой кнопкой мыши «Выполнить». As--->Java Application。

Этапы выполнения скрипта:

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

(2) Появится окно с подсказкой о новой версии, щелкните его некоторое время, а затем говорите.

(3) Нажмите на меню слева.

(4) Нажмите «Справочный центр».

(5) Распечатайте, является ли тестируемое приложение NATIVE_APP или WEBVIEW. Если оно имеет оба, это гибридное приложение. Распечатанный результат: вы можете видеть, что это гибридное приложение.

NATIVE_APP

WEBVIEW_com.xiaoV.BWalletBeta

(6) Переключитесь на WEBVIEW_com.xiaoV.BWalletBeta (режим веб-просмотра), чтобы найти веб-элементы.

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

(8) Нажмите о займе денег.

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

(10) Нажмите, чтобы вернуться

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

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

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 192.168.113.101:5555 может быть обнаружен.

В симуляторе с udid 192.168.113.101:5555 откройте страницу веб-просмотра приложения, которым вы хотите управлять. Примером в этой главе является открытие страницы справочного центра приложения Bangbang. В настоящее время вы можете увидеть справочный центр. в браузере Chrome на ПК. Откройте ссылку, как показано на рисунке, номер версии WebView в симуляторе — 44.0.2403.119.

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

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

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

Выберите указанную версию chromedriver (на фото: версия WebView — 44.0.2403.119, поэтому выбрана версия chromedriver 2.20). Вы можете скачать указанный 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

1.3.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. Запустите тестовый скрипт, щелкните правой кнопкой мыши «Выполнить». As--->Java Application。

Этапы выполнения скрипта:

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

(2) Нажмите на мой

(3) Распечатайте, является ли тестируемое приложение NATIVE_APP или WEBVIEW. Если оно имеет оба, это гибридное приложение. Распечатанный результат: вы можете видеть, что это гибридное приложение.

NATIVE_APP

WEBVIEW_com.Qunar

WEBVIEW_com.iflytek.ringdiyclient

WEBVIEW_com.huawei.wifiprobqeservice

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

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

(6) Нажмите, чтобы вернуться

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

(8) Нажмите на домашнюю страницу-Билеты.

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

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

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.

На реальной машине с udid MYV0215825000026 откройте страницу веб-просмотра приложения, которым вы хотите управлять. Примером в этой главе является открытие приложения Qunar — Моя страница. В это время вы можете увидеть ссылку доступа к моей странице в Chrome. браузер ПК, как показано на рисунке. Как показано, номер версии WebView на реальной машине — 55.0.2883.91.

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

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

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

Выберите указанную версию chromedriver (как показано на рисунке: версия WebView — 55.0.2883.91, поэтому выбрана версия 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

Глава 2 IOS

2.1 Создать проект

1. Запустите Затмение,правая кнопка мышиNew--->Project。

2. Создайте проект Java и выберите «Проект Java» в каталоге Java.

3. Введите имя проекта (например: My_Appium_Demo) и нажмите «Готово».

4. Создайте папку lib для хранения пакета jar. Скопируйте пакеты jar Appium Clients и Selenium jar в папку.

5. Создайте папку приложений для хранения приложений. Скопируйте в папку приложения UICatalog.app и VWallet.ipa.

6. Выберите скопированный Appium Clients jar и селен jar, щелкните правой кнопкой мыши «Создать» Path--->Add to Build Path。

7、Appium Clients jar и селен Пакет jar упоминается в проекте.

8. Выберите исходную папку src.,правая кнопка мышиNew--->Class,Создать класс Java,Введите имя пакета (Например:com.test.demo), имя класса (Например: пример симулятора — IOS_Hybrid_Simulator, пример реальной машины — IOS_Hybrid_RealMachine),Нажмите «Готово», чтобы завершить.

9. Создан первый Демо-проект, IOS-гибрид (симулятор/реальная машина).

2.2 Написание сценариев

2.2.1 Симулятор

1. Используйте Xcode, например, для создания симулятора: пример симулятора в этой главе называется iPhone 8, версия IOS 11.2.

2. О тестовом приложении:

(1) Если вы работаете на эмуляторе, вам необходимо установить файл приложения .app.

Чтобы запустить приложение в симуляторе IOS, вы должны выбрать тип симулятора при компиляции в Xcode. Суффикс файла, созданного при компиляции, — .app.

(2) Если вы работаете на реальном компьютере, вам необходимо установить файл приложения .ipa. Он разделен на официальную версию и версию для разработки.

Официальную версию (уже выпущенную в App Store) можно загрузить и установить непосредственно в App Store или получить файл приложения .ipa и установить его на реальный компьютер с помощью команд.

Для версии для разработки (не опубликованной в App Store) вы можете получить только файл приложения .ipa и добавить UDID реального компьютера в свою учетную запись разработчика Apple, прежде чем вы сможете установить его на реальный компьютер с помощью команд.

3. Если в симуляторе нет приложения для тестирования, просто перетащите приложение .app в симулятор, чтобы установить его.

4. В симуляторе нет приложения для тестирования, и я хочу установить его автоматически при выполнении автоматического теста. Вам необходимо добавить в скрипт следующий код:

Язык кода:javascript
копировать
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "app");
File app = new File(appDir, "UICatalog.app");

// Локальный абсолютный путь или удаленный путь, по которому находится файл `.ipa` или `.apk`, либо это может быть `.zip`, включающий один из двух.
// Appium сначала попытается установить приложение, соответствующее пути, на соответствующую реальную машину или симулятор.
// Для Android, если вы укажете `app-package` и `app-activity`, вам не нужно указывать `app`.
// Например /abs/path/to/my.apk or http://myapp.com/app.ipa
capabilities.setCapability("app", app.getAbsolutePath());

5. Если в симуляторе есть приложение, которое нужно протестировать, вам не нужно устанавливать тестируемое приложение каждый раз при выполнении тестового сценария. Вам нужно только указать идентификатор пакета.

6. Чтобы протестировать приложение в симуляторе, вам необходимо указать BundleId приложения. Поскольку .app — это бета-приложение, вы можете запросить BundleId у разработчика.

Например: идентификатор пакета приложения UICatalog в этой главе — com.example.apple-samplecode.UICatalog.

Язык кода:javascript
копировать
// Комплект тестируемого приложения ID
// Используется для начала тестирования на реальных устройствах, а также для использования других необходимых связок. Тест запуска ключевого слова ID
// Использование пакета ID При выполнении тестов на реальном устройстве вам не нужно указывать ключевое слово app, но вы должны указать udid.
capabilities.setCapability("bundleId", "com.example.apple-samplecode.UICatalog");

7. Затем начните использовать инструмент поиска позиционирования элемента, чтобы получить значение атрибута элемента и другую информацию. Как узнать, является ли тестируемое приложение гибридным? Например, при использовании инструмента «Инспектор» Appium Desktop для поиска элементов иногда элементы в веб-представлении не распознаются и отображается XCUIElementTypeWebView.

первый Открыть рабочий стол Appium, нажмите «Пуск». Server v1.7.2 для включения службы Appium.

Нажмите на увеличительное стекло (Начать сеанс инспектора).

Введите информацию о параметрах, связанных с желаемыми возможностями. Например:

Язык кода:javascript
копировать
{
  "platformName": "iOS",
  "platformVersion": "11.2",
  "deviceName": "iPhone 8",
  "automationName": "XCUITest",
  "bundleId": "com.example.apple-samplecode.UICatalog"
}

Затем нажмите «Начать сеанс».

Получите указанную информацию об элементе.

Отобразите страницу веб-просмотра, как показано на рисунке XCUIElementTypeWebView.

8. Затем начните использовать инструмент позиционирования элемента поиска, чтобы получить такую ​​информацию, как значения атрибутов элементов Webview.

Есть два способа получить элементы Webview (просто выберите один). Метод позиционирования элемента такой же, как и в Selenium. WebDriver соответствует.

Способ 1: через Safari на Mac

Сначала откройте приложение на симуляторе, а затем откройте страницу Webview, отображаемую этим приложением;открыть послеMacнаSafari,Выберите разработку--->эмулятор,В это время вы можете увидеть страницу Webview, открытую симулятором.,Например: Домашняя страница Apple.

Щелкните ссылку на домашней странице Apple, и появится новое окно, отображающее информацию об исходном коде HTML домашней страницы Apple, и вы сможете получить соответствующую информацию об элементе Webview.

Способ 2. С помощью инструмента ios_webkit_debug_proxy.

Сначала откройте приложение на симуляторе, а затем откройте страницу Webview, отображаемую этим приложением;

Затем откройте терминал на своем Mac и введите команду запуска агента.

ios_webkit_debug_proxy -f chrome-devtools://devtools/bundled/inspector.html

Откройте браузер Chrome на своем Mac и введите http://localhost:9221/ в адресной строке. Появится список всех подключенных устройств. Выберите устройство и нажмите «Открыть». Например: эмулятор

В это время обнаруживается страница Webview, открытая в симуляторе, например домашняя страница Apple.

После выбора щелкните правой кнопкой мыши и перейдите к...

Откройте выбранную страницу, откройте инструменты разработчика Chrome и отобразите информацию об исходном коде HTML. Вы можете получить соответствующую информацию об элементе Webview.

Или после выбора щелкните правой кнопкой мыши, чтобы скопировать адрес ссылки.

Например:

chrome-devtools://devtools/bundled/inspector.html?ws=localhost:9222/devtools/page/1

Откройте новое окно Chrome, вставьте скопированный адрес и посетите

Отображая информацию об исходном коде HTML, вы можете получить соответствующую информацию об элементе Webview.

9. Для переключения между NATIVE_APP или WEBVIEW_имя тестируемого процесса используйте контекстный метод.

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

Язык кода:javascript
копировать
package com.test.demo;
import java.io.File;
import java.net.URL;
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
/**
 * iOS-гибридный симулятор
 *
 * @author wangmcn
 *
 */
public class IOS_Hybrid_Simulator {
       public static void main(String[] args) throws Exception {
              IOSDriverdriver;
              File classpathRoot = new File(System.getProperty("user.dir"));
              File appDir = new File(classpathRoot, "app");
              File app = new File(appDir, "UICatalog.app");
              DesiredCapabilities capabilities = new DesiredCapabilities();

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

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

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

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

              // Локальный абсолютный путь или удаленный путь, по которому находится файл `.ipa` или `.apk`, либо это может быть `.zip`, включающий один из двух.
              // Appium сначала попытается установить приложение, соответствующее пути, на соответствующую реальную машину или симулятор.
              // Для Android, если вы укажете `app-package` и `app-activity`, вам не нужно указывать `app`.
              // Например /abs/path/to/my.apk or http://myapp.com/app.ipa
              capabilities.setCapability("app", app.getAbsolutePath());

              // Комплект тестируемого приложения ID
              // Используется для начала тестирования на реальных устройствах, а также для использования других необходимых связок. Тест запуска ключевого слова ID
              // Использование пакета ID При выполнении тестов на реальном устройстве вам не нужно указывать ключевое слово app, но вы должны указать udid.
              capabilities.setCapability("bundleId", "com.example.apple-samplecode.UICatalog");

              // Установите значение 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);

              // IWDP используется в Appium, что относится к ios-webkit-debug-proxy.
              capabilities.setCapability("startIWDP", true);

              // Когда появляется предупреждение о доступе к личной информации IOS (например, местоположение, контакт, изображение), автоматически выберите «Принять» (Принять), значение по умолчанию — «false».
              capabilities.setCapability("autoAcceptAlerts", false);

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

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

              Thread.sleep(2000);

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

              Thread.sleep(2000);

              // Нажмите на Интернет View
              driver.findElement(By.name("Web View")).click();

              Thread.sleep(5000);

              SetcontextNames = driver.getContextHandles();
              for (String contextName : contextNames) {
                     // Распечатайте, является ли тестируемое приложение NATIVE_APP или WEBVIEW. Если оно имеет оба, это гибридное приложение.
                     System.out.println(contextName);
                     if (contextName.contains("WEBVIEW")) {
                            // Переключитесь в режим веб-просмотра, чтобы найти веб-элементы.
                            driver.context(contextName);
                            System.out.println("Переключиться на веб-просмотр:" + contextName);
                     }
              }

              Thread.sleep(2000);

              // Распечатать исходный код текущей веб-страницы
              System.out.println(driver.getPageSource());

              Thread.sleep(2000);

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

              System.out.println("Переключиться на приложение: NATIVE_APP");
              Thread.sleep(2000);

              // Нажмите, чтобы вернуться
              driver.findElement(By.name("UICatalog")).click();

              Thread.sleep(2000);
              driver.quit();
       }
}

2.2.2 Реальная машина

1. Сначала получите идентификатор устройства udid реальной машины и введите idevice_id -l в терминале.

Как показано на рисунке: отобразите информацию о реальной машине.

2. О тестовом приложении:

(1) Если вы работаете на эмуляторе, вам необходимо установить файл приложения .app.

Чтобы запустить приложение в симуляторе IOS, вы должны выбрать тип симулятора при компиляции в Xcode. Суффикс файла, созданного при компиляции, — .app.

(2) Если вы работаете на реальном компьютере, вам необходимо установить файл приложения .ipa. Он разделен на официальную версию и версию для разработки.

Официальную версию (уже выпущенную в App Store) можно загрузить и установить непосредственно в App Store или получить файл приложения .ipa и установить его на реальный компьютер с помощью команд.

Для версии для разработки (не опубликованной в App Store) вы можете получить только файл приложения .ipa и добавить UDID реального компьютера в свою учетную запись разработчика Apple, прежде чем вы сможете установить его на реальный компьютер с помощью команд.

3. В примерах в этой главе используется реальная машина для тестирования разрабатываемой версии приложения Bangbang (загрузите приложение Bangbang и установите его на реальную машину, получив доступ к каналам, не принадлежащим App Store).

4. Если на реальном устройстве нет приложения, которое нужно протестировать, вы можете установить его на устройство перед выполнением автоматического тестирования и ввести команду установки ideviceinstaller. -i [xxx.ipa] -o [УИД устройства] Чтобы установить,Или используйте свой мобильный телефон для сканирования QR-кода приложения, чтобы загрузить и установить его.。Например:

ideviceinstaller -i /Users/automation/test/VWallet.ipa -o c5dc675bddf7d1ac6d91783d5224d72b427f8d04

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

Язык кода:javascript
копировать
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "app");
File app = new File(appDir, "VWallet.ipa");

// Локальный абсолютный путь или удаленный путь, по которому находится файл `.ipa` или `.apk`, либо это может быть `.zip`, включающий один из двух.
// Appium сначала попытается установить приложение, соответствующее пути, на соответствующую реальную машину или симулятор.
// Для Android, если вы укажете `app-package` и `app-activity`, вам не нужно указывать `app`.
// Например /abs/path/to/my.apk or http://myapp.com/app.ipa
capabilities.setCapability("app", app.getAbsolutePath());

6. На реальном устройстве имеется приложение, которое необходимо протестировать. Вам не нужно устанавливать тестируемое приложение каждый раз при выполнении тестового сценария. Достаточно указать идентификатор пакета.

7. Получите BundleId приложения, откройте терминал и введите ideviceinstaller -l.

Как показано на рисунке: идентификатор пакета справочного приложения в этой главе — com.xiaoV.BangWalletBeta.

Язык кода:javascript
копировать
// Комплект тестируемого приложения ID
// Используется для начала тестирования на реальных устройствах, а также для использования других необходимых связок. Тест запуска ключевого слова ID
// Использование пакета ID При выполнении тестов на реальном устройстве вам не нужно указывать ключевое слово app, но вы должны указать udid.
capabilities.setCapability("bundleId", "com.xiaoV.BangWalletBeta");

8. В связи с тестированием разрабатываемой версии приложения при запуске Appium необходимо добавить

"xcodeOrgId": "< Команда в аккаунте разработчика Apple ID >",

"xcodeSigningId": "< Название сертификата при упаковке >"

эти два параметра.

Как получить TeamID?

Войдите на https://developer.apple.com/account/ и найдите его в разделе «Членство» слева.

Скрипт добавляет следующие параметры:

Язык кода:javascript
копировать
// Команда в аккаунте разработчика Apple ID
capabilities.setCapability("xcodeOrgId", "69XXXXXXXX");

// Название сертификата при упаковке
capabilities.setCapability("xcodeSigningId", "iPhone Developer");

9. Затем начните использовать инструмент поиска позиционирования элемента, чтобы получить значение атрибута элемента и другую информацию. Как же узнать, является ли тестируемое приложение гибридным? Например, при использовании инструмента «Инспектор» Appium Desktop для поиска элементов иногда элементы в веб-представлении не распознаются и отображается XCUIElementTypeWebView.

первый Открыть рабочий стол Appium, нажмите «Пуск». Server v1.6.5 для включения службы Appium.

Нажмите на увеличительное стекло (Начать сеанс инспектора).

Введите информацию о параметрах, связанных с желаемыми возможностями. Например:

Язык кода:javascript
копировать
{
  "platformName": "iOS",
  "platformVersion": "11.1",
  "deviceName": "test",
  "automationName": "XCUITest",
  "bundleId": "com.xiaoV.BangWalletBeta",
  "udid": "c5dc675bddf7d1ac6d91783d5224d72b427f8d04",
  "xcodeOrgId": "69XXXXXXXX",
  "xcodeSigningId": "iPhone Developer"
}

Затем нажмите «Начать сеанс».

Получите указанную информацию об элементе.

Отобразите страницу веб-просмотра, как показано на рисунке XCUIElementTypeWebView.

10. Затем начните использовать инструмент позиционирования элемента поиска, чтобы получить такую ​​информацию, как значения атрибутов элементов Webview.

Есть два способа получить элементы Webview (просто выберите один). Метод позиционирования элемента такой же, как и в Selenium. WebDriver соответствует.

Способ 1: через Safari на Mac

Сначала откройте приложение на реальном устройстве, а затем откройте страницу веб-просмотра, отображаемую приложением;открыть послеMacнаSafari,Выберите разработку--->Реальное устройство(Как показано на картинке:имя устройстваtest),В это время вы можете увидеть страницу веб-просмотра, открытую на реальном устройстве.,Например: Страница справочного центра приложения Bangbang.

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

Способ 2. С помощью инструмента ios_webkit_debug_proxy.

Сначала откройте приложение на реальном устройстве, а затем откройте страницу веб-просмотра, отображаемую приложением;

Затем откройте терминал на своем Mac и введите команду запуска агента.

ios_webkit_debug_proxy -f chrome-devtools://devtools/bundled/inspector.html

Откройте браузер Chrome на Mac,Введите http://localhost:9221/ в адресную строку.,Здесь будет отображаться список всех подключенных устройств.,Выберите устройство и нажмите «Открыть». Например:Реальное устройство (тест)

В это время обнаруживается страница Webview, открытая на реальном устройстве, например: страница Справочного центра.

После выбора щелкните правой кнопкой мыши и перейдите к...

Откройте выбранную страницу, откройте инструменты разработчика Chrome и отобразите информацию об исходном коде HTML. Вы можете получить соответствующую информацию об элементе Webview.

Или после выбора щелкните правой кнопкой мыши, чтобы скопировать адрес ссылки.

Например:

chrome-devtools://devtools/bundled/inspector.html?ws=localhost:9223/devtools/page/1

Откройте новое окно Chrome, вставьте скопированный адрес и посетите

Отображая информацию об исходном коде HTML, вы можете получить соответствующую информацию об элементе Webview.

11. Для переключения между NATIVE_APP или WEBVIEW_имя тестируемого процесса используйте контекстный метод.

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

Язык кода:javascript
копировать
package com.test.demo;
import java.io.File;
import java.net.URL;
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
/**
 * IOS-гибридно-реальная машина
 *
 * @author wangmcn
 *
 */
public class IOS_Hybrid_RealMachine {
       public static void main(String[] args) throws Exception {
              IOSDriverdriver;
              File classpathRoot = new File(System.getProperty("user.dir"));
              File appDir = new File(classpathRoot, "app");
              File app = new File(appDir, "VWallet.ipa");
              DesiredCapabilities capabilities = new DesiredCapabilities();

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

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

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

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

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

              // Локальный абсолютный путь или удаленный путь, по которому находится файл `.ipa` или `.apk`, либо это может быть `.zip`, включающий один из двух.
              // Appium сначала попытается установить приложение, соответствующее пути, на соответствующую реальную машину или симулятор.
              // Для Android, если вы укажете `app-package` и `app-activity`, вам не нужно указывать `app`.
              // Например /abs/path/to/my.apk or http://myapp.com/app.ipa
              capabilities.setCapability("app", app.getAbsolutePath());

              // Комплект тестируемого приложения ID
              // Используется для начала тестирования на реальных устройствах, а также для использования других необходимых связок. Тест запуска ключевого слова ID
              // Использование пакета ID При выполнении тестов на реальном устройстве вам не нужно указывать ключевое слово app, но вы должны указать udid.
              capabilities.setCapability("bundleId", "com.xiaoV.BangWalletBeta");

              // Установите значение 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);

              // Команда в аккаунте разработчика Apple ID
              capabilities.setCapability("xcodeOrgId", "69XXXXXXXX");

              // Название сертификата при упаковке
              capabilities.setCapability("xcodeSigningId", "iPhone Developer");

              // IWDP используется в Appium, что относится к ios-webkit-debug-proxy.
              capabilities.setCapability("startIWDP", true);

              // Когда появляется предупреждение о доступе к личной информации IOS (например, местоположение, контакт, изображение), автоматически выберите «Принять» (Принять), значение по умолчанию — «false».
              capabilities.setCapability("autoAcceptAlerts", false);

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

              // Появится окно с подсказкой о новой версии, щелкните его и повторите попытку.
              driver.findElement(By.name("Я расскажу об этом позже")).click();

              Thread.sleep(2000);

              // Нажмите на меню слева
              driver.findElement(By.name("logout Sidebar")).click();

              Thread.sleep(2000);

              // Нажмите Справочный центр.
              driver.findElement(By.name("Справочный центр")).click();

              Thread.sleep(5000);

              SetcontextNames = driver.getContextHandles();
              for (String contextName : contextNames) {
                     // Распечатайте, является ли тестируемое приложение NATIVE_APP или WEBVIEW. Если оно имеет оба, это гибридное приложение.
                     System.out.println(contextName);
                     if (contextName.contains("WEBVIEW")) {
                            // Переключитесь в режим веб-просмотра, чтобы найти веб-элементы.
                            driver.context(contextName);
                            System.out.println("Переключиться на веб-просмотр:" + contextName);
                     }
              }

              Thread.sleep(2000);

              // Распечатать исходный код текущей веб-страницы
              System.out.println(driver.getPageSource());

              Thread.sleep(2000);

              // Нажмите о займе денег
              driver.findElement(By.xpath(".//*[@id='question-list']/section/div[1]/ul/li[2]")).click();

              Thread.sleep(2000);

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

              System.out.println("Переключиться на приложение: NATIVE_APP");
              Thread.sleep(2000);

              // Нажмите, чтобы вернуться
              driver.findElement(By.name("btn back")).click();

              Thread.sleep(2000);
              driver.quit();
       }
}

2.3 Выполнить скрипт

2.3.1 Симулятор

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

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

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

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

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

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

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

2. Запустите тестовый скрипт, щелкните правой кнопкой мыши «Выполнить». As--->Java Application。

При выполнении сценария Appium Desktop или Appium Server автоматически устанавливает WDA (WebDriverAgent) на эмулятор.

Этапы выполнения скрипта:

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

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

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

(4) Нажмите «Просмотр в Интернете».

(5) Распечатайте, является ли тестируемое приложение NATIVE_APP или WEBVIEW. Если оно имеет оба, это гибридное приложение. Распечатанный результат: вы можете видеть, что это гибридное приложение.

NATIVE_APP

WEBVIEW_6650.1 (значение WEBVIEW меняется каждый раз при выполнении, а не фиксируется)

(6) Переключитесь на WEBVIEW_6650.1 (режим веб-просмотра), чтобы найти веб-элементы.

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

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

(9) Нажмите, чтобы вернуться

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

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

2.3.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. Запустите тестовый скрипт, щелкните правой кнопкой мыши «Выполнить». As--->Java Application。

Этапы выполнения скрипта:

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

(2) Появится окно с подсказкой о новой версии, щелкните его некоторое время, а затем говорите.

(3) Нажмите на меню слева.

(4) Нажмите «Справочный центр».

(5) Распечатайте, является ли тестируемое приложение NATIVE_APP или WEBVIEW. Если оно имеет оба, это гибридное приложение. Распечатанный результат: вы можете видеть, что это гибридное приложение.

NATIVE_APP

WEBVIEW_20 (значение WEBVIEW меняется каждый раз при выполнении, а не фиксируется)

(6) Переключитесь в WEBVIEW_20 (режим веб-просмотра), чтобы найти веб-элементы.

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

(8) Нажмите о займе денег.

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

(10) Нажмите, чтобы вернуться

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

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

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