Первый демо-микс
Что такое гибрид?
Приложение — это мобильное гибридное приложение, то есть Webview встроен в мобильное приложение, а доступ к веб-страницам осуществляется через Webview.
Мобильное приложение и веб-представление принадлежат двум разным контекстам. Контекст мобильного приложения по умолчанию — «NATIVE_APP», а контекст веб-представления по умолчанию — «Имя процесса WEBVIEW_Tested». При тестировании содержимого веб-страницы в Webview вам необходимо переключиться на контекст Webview.
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. Пример симулятора в этой главе использует 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. В симуляторе нет приложения для тестирования, и я хочу установить его автоматически при выполнении автоматического теста. Вам необходимо добавить в скрипт следующий код:
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. Код скрипта:
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. Сначала получите реальный идентификатор устройства и введите команду adb devices в командной строке.
2. Если на реальном устройстве нет приложения, которое нужно протестировать, вы можете установить его на устройство перед выполнением автоматического тестирования. Введите команду установки adb install -r для установки или используйте мобильный помощник для установки.
3. На реальном устройстве нет приложения, которое можно было бы протестировать, и я хочу установить его автоматически при выполнении автоматического теста. Вам необходимо добавить в скрипт следующий код:
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. Код скрипта:
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. Запускаем сервис 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. Запускаем сервис 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.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-гибрид (симулятор/реальная машина).
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. В симуляторе нет приложения для тестирования, и я хочу установить его автоматически при выполнении автоматического теста. Вам необходимо добавить в скрипт следующий код:
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.
// Комплект тестируемого приложения ID
// Используется для начала тестирования на реальных устройствах, а также для использования других необходимых связок. Тест запуска ключевого слова ID
// Использование пакета ID При выполнении тестов на реальном устройстве вам не нужно указывать ключевое слово app, но вы должны указать udid.
capabilities.setCapability("bundleId", "com.example.apple-samplecode.UICatalog");
7. Затем начните использовать инструмент поиска позиционирования элемента, чтобы получить значение атрибута элемента и другую информацию. Как узнать, является ли тестируемое приложение гибридным? Например, при использовании инструмента «Инспектор» Appium Desktop для поиска элементов иногда элементы в веб-представлении не распознаются и отображается XCUIElementTypeWebView.
первый Открыть рабочий стол Appium, нажмите «Пуск». Server v1.7.2 для включения службы Appium.
Нажмите на увеличительное стекло (Начать сеанс инспектора).
Введите информацию о параметрах, связанных с желаемыми возможностями. Например:
{
"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. Код скрипта:
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();
}
}
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. На реальном устройстве нет приложения, которое можно было бы протестировать, и я хочу установить его автоматически при выполнении автоматического теста. Вам необходимо добавить в скрипт следующий код:
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.
// Комплект тестируемого приложения ID
// Используется для начала тестирования на реальных устройствах, а также для использования других необходимых связок. Тест запуска ключевого слова ID
// Использование пакета ID При выполнении тестов на реальном устройстве вам не нужно указывать ключевое слово app, но вы должны указать udid.
capabilities.setCapability("bundleId", "com.xiaoV.BangWalletBeta");
8. В связи с тестированием разрабатываемой версии приложения при запуске Appium необходимо добавить
"xcodeOrgId": "< Команда в аккаунте разработчика Apple ID >",
"xcodeSigningId": "< Название сертификата при упаковке >"
эти два параметра.
Как получить TeamID?
Войдите на https://developer.apple.com/account/ и найдите его в разделе «Членство» слева.
Скрипт добавляет следующие параметры:
// Команда в аккаунте разработчика Apple ID
capabilities.setCapability("xcodeOrgId", "69XXXXXXXX");
// Название сертификата при упаковке
capabilities.setCapability("xcodeSigningId", "iPhone Developer");
9. Затем начните использовать инструмент поиска позиционирования элемента, чтобы получить значение атрибута элемента и другую информацию. Как же узнать, является ли тестируемое приложение гибридным? Например, при использовании инструмента «Инспектор» Appium Desktop для поиска элементов иногда элементы в веб-представлении не распознаются и отображается XCUIElementTypeWebView.
первый Открыть рабочий стол Appium, нажмите «Пуск». Server v1.6.5 для включения службы Appium.
Нажмите на увеличительное стекло (Начать сеанс инспектора).
Введите информацию о параметрах, связанных с желаемыми возможностями. Например:
{
"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. Код скрипта:
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();
}
}
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.
После завершения выполнения скрипта на консоли выводится информация:
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.
После завершения выполнения скрипта на консоли выводится информация: