Привет. Продолжаем перевод книги Appium Essentials и изучение мобильной автоматизации. Что уже пройдено:
В этой главе мы, переходим к автоматизации приложений:
Впереди много кода. Поехали!
Перед запуском Appium, давайте убедимся, что весь необходимый софт установлен:
Требования для Android:
Требования для iOS:
Работая с Appium, необходимо установить desired capabilities и инициировать Android/iOS драйвер.
Есть два способа задать desired capabilities: через Appium GUI и, инициировав объект desired capabilities. Объект desired capabilities более предпочтителен. Рассмотрим оба варианта: Ниже настройки Android в Appium GUI для нативных и гибридных приложений:
Как настроить:
Теперь про настройки Android в Appium GUI для веб-приложений:
Как настраивать:
Теперь о втором способе формирования DC.
В первой главе мы уже обсудили, какие бывают desired capabilities и зачем они нужны, так что здесь мы сразу погрузимся в код [наканецта!!1!]. Прежде всего, нужно импортировать пакеты:
Затем, создадим desired capabilities (для нативных и гибридных):
В веб-приложения на Android, некоторые опции не нужны. Например APP, APP PACKAGE и APP ACTIVITY, потому что мы запускаем браузер.
Для начала, необходимо импортировать пакеты:
Затем, создадим desired capabilities (для веб):
По части desired capabilities мы все сделали. Теперь нужно инициировать драйвер Android и подключить его к Appium-серверу.
Снова нужно импортировать пакеты:
Затем, инициализируем Android драйвер:
Эта строка запустит приложение на эмуляторе, используя те настройки, которые были заданы в desired capabilities.
Ну а теперь можно создать заготовку для теста, используя TestNG:
Также, как и на Android, задать desired capabilities можно двумя путями.
Настройки для нативных и гибридных приложений:
Настройки для веб-приложений:
Какие бывают DC и зачем, мы обсудили в главе 1, так что перейдем сразу к коду. Сперва, импорт пакетов:
Затем, создадим desired capabilities (для нативных и гибридных):
Импорт пакетов:
Теперь установим desired capacities для веб-приложения:
Осталось инициализировать драйвер iOS.
Импорт:
Инициализация:
Теперь можно писать тест, используя TestNG:
Ниже пример автоматизации калькулятора Android. В примере мы пробуем сложить два числа.
Ниже пример работы с приложением TestApp; его можно скачать отсюда. После скачивания, разархивируйте его.
В этом примере попробуем сложить два числа:
В качестве примера, возьмем поисковую страницу Google. Для работы будем использовать нативный браузер Android:
В качестве примера, возьмем поисковую страницу Google. Для работы будем использовать нативный браузер Safari:
Для изучения, используем testApp. Его можно скачать отсюда. Перед работой с гибридными приложениями, нужно выполнить шаги инструкции.
Здесь возьмем, для примера, WebViewApp. Скачать можно отсюда. После скачивания, разархивируйте приложение:
На этом все. В следующей главе, мы посмотрим особенности работы с реальными устройствами
- Глава 1, в которой мы разбираемся, что тут и как
- Глава 2 про установку и настройку всего необходимого для работы
- Глава 3, где мы изучаем, что такое Appium GUI
- Глава 4 о том, как можно локализовать элементы в мобильном приложении
В этой главе мы, переходим к автоматизации приложений:
- Автоматизация нативных приложений
- Автоматизация гибридных приложений
- Работа с веб-приложениями и нативными браузерами
- Работа с веб-приложениями и Safari
Впереди много кода. Поехали!
Перед стартом
Перед запуском Appium, давайте убедимся, что весь необходимый софт установлен:
Требования для Android:
- Java (версии 7 и выше)
- Android SDK API (версии 17 и выше)
- Эмулятор
- Eclipse [ну или Idea]
- TestNG
- Appium-сервер
- Клиентская библиотека Appium (Java)
- Selenium Server и java-библиотека WebDriver
- APK тестируемого приложения
Требования для iOS:
- Mac OS 10.7 и выше
- Xcode (версии 4.6.3 и выше; рекомендуется 5.1)
- Симулятор
- На симуляторе стоит Safari
- Java версии 7
- Eclipse [или Idea]
- TestNG
- Appium-сервер
- Клиентская библиотека Appium (Java)
- Selenium Server и java-библиотека WebDriver
Работая с Appium, необходимо установить desired capabilities и инициировать Android/iOS драйвер.
Необходимые desired capabilities для Android и запуск Android драйвера
Есть два способа задать desired capabilities: через Appium GUI и, инициировав объект desired capabilities. Объект desired capabilities более предпочтителен. Рассмотрим оба варианта: Ниже настройки Android в Appium GUI для нативных и гибридных приложений:
Как настроить:
- Откройте в Appium GUI настройки Android.
- Укажите путь до тестируемого приложения.
- Выберите пакет из списка.
- Выберите из списка активити для запуска.
Примечание от автораЕсли приложение уже установлено на виртуальное устройство, шаги 2-4 делать не нужно. Нужно передать на эмулятор информацию об APK для дальнейшей работы. Как это сделать:- Запустите эмулятор
- Откройте командную строку [на компьютере]
- Напишите
adb -e install <путь до apk>
- Нажмите Enter
- Вы должны увидеть сообщение об успешной установке
- Включите Launch AVD и выберите созданный эмулятор из списка [предполагается, что эмулятор вы уже создали].
- Выберите из списка PlatformVersion.
- Включите Device Name и напишите «Android emulator».
- Запустите Appium-сервер.
Теперь про настройки Android в Appium GUI для веб-приложений:
Как настраивать:
- Откройте настройки Android.
- Включите Launch AVD и выберите созданный эмулятор из списка [предполагается, что эмулятор вы уже создали].
- Выберите из списка PlatformVersion.
- Включите Use Browser и выберите браузер из списка.
- Включите Device Name и напишите «Android emulator».
- Запустите Appium-сервер.
Теперь о втором способе формирования DC.
Desired capabilities для нативных и гибридных приложений
В первой главе мы уже обсудили, какие бывают desired capabilities и зачем они нужны, так что здесь мы сразу погрузимся в код [наканецта!!1!]. Прежде всего, нужно импортировать пакеты:
import java.io.File;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.remote.MobileCapabilityType;
Затем, создадим desired capabilities (для нативных и гибридных):
DesiredCapabilities caps = new DesiredCapabilities();//создаем объект
File app=new File("path of the apk");//создаем объект File, чтобы определить путь до apk
caps.setCapability(MobileCapabilityType.APP,app);//требуется, если приложение еще НЕ установлено на эмулятор.
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");//указываем версию Android
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");//Имя OS
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "Android emulator");//Сообщаем, что будет использоваться эмулятор
caps.setCapability("avd","Name of the AVD to launch");//Указываем, какой конкретно эмулятор хотим запустить
caps.setCapability(MobileCapabilityType.APP_PACKAGE, "package name of your app (you can get it from apk info app)");//определяем package для запуска
caps.setCapability(MobileCapabilityType.APP_ACTIVITY, "Launch activity of your app (you can get it from apk info app)");//activity для запуска
Desired capabilities для веб-приложений
В веб-приложения на Android, некоторые опции не нужны. Например APP, APP PACKAGE и APP ACTIVITY, потому что мы запускаем браузер.
Для начала, необходимо импортировать пакеты:
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.remote.MobileCapabilityType;
Затем, создадим desired capabilities (для веб):
DesiredCapabilities caps = new DesiredCapabilities();//создаем объект
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");//указываем версию Android
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");//Имя OS
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "Android emulator");//Сообщаем, что будет использоваться эмулятор
caps.setCapability("avd","Name of the AVD to launch");//Указываем, какой конкретно эмулятор хотим запустить
caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Browser"); //для запуска браузера
По части desired capabilities мы все сделали. Теперь нужно инициировать драйвер Android и подключить его к Appium-серверу.
Снова нужно импортировать пакеты:
import io.appium.java_client.android.AndroidDriver;
import java.net.URL;
Затем, инициализируем Android драйвер:
AndroidDriver driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps); //caps был создан выше
Эта строка запустит приложение на эмуляторе, используя те настройки, которые были заданы в desired capabilities.
Ну а теперь можно создать заготовку для теста, используя TestNG:
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileCapabilityType;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class TestAppIication {
AndroidDriver driver;
@BeforeClass
public void setUp() throws MalformedURLException{
//Определяем desired capabilities
DesiredCapabilities caps = new DesiredCapabilities();
File app=new File("path of the apk");
caps.setCapability(MobileCapabilityType.APP,app);
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "Android emulator");
caps.setCapability("avd","Name of the AVD to launch");
caps.setCapability(MobileCapabilityType.APP_PACKAGE, "package name of your app (you can get it from apk info app)");
caps.setCapability(MobileCapabilityType.APP_ACTIVITY, "Launch activity of your app (you can get it from apk info app)");
caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Browser");// при работе с веб-приложением
driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
}
@Test
public void testExample(){
//здесь будет сам тест
}
@AfterClass
public void tearDown(){
driver.closeApp();//CloseApp() функция используется для закрытия нативного или гибридного приложения, а quit() и close() - для веба
}
}
Необходимые desired capabilities для iOS и запуск iOS драйвера
Также, как и на Android, задать desired capabilities можно двумя путями.
Настройки для нативных и гибридных приложений:
- Откройте настройки iOS
- Укажите путь до тестируемого приложения
- Включите Force Device и выберите симулятор из списка
- Выберите из списка Platform Version (или можете написать сами, например 8.1)
- Запустите Appium-сервер
Настройки для веб-приложений:
- Откройте настройки iOS
- Выберите «Use Mobile Safari»
- Включите Force Device и выберите симулятор из списка
- Выберите из списка Platform Version (или можете написать сами, например 8.1)
- Запустите Appium-сервер
Desired capabilities для нативных и гибридных приложений
Какие бывают DC и зачем, мы обсудили в главе 1, так что перейдем сразу к коду. Сперва, импорт пакетов:
import java.io.File;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.remote.MobileCapabilityType;
Затем, создадим desired capabilities (для нативных и гибридных):
DesiredCapabilities caps = new DesiredCapabilities();//создаем объект
File app=new File("path of the app");//создаем объект File, чтобы определить путь до приложения
caps.setCapability(MobileCapabilityType.APP,app);//указываем путь до приложения
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1");//Версия iOS
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");//Имя OS
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone 5");//Укажите корректное имя эмулятора или Appium сгенерирует исключение
Desired capabilities для веб-приложений
Импорт пакетов:
import java.io.File;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.remote.MobileCapabilityType;
Теперь установим desired capacities для веб-приложения:
DesiredCapabilities caps = new DesiredCapabilities();//создаем объект
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1");//Версия iOS
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");//Имя OS
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone 5");//Укажите корректное имя эмулятора или Appium сгенерирует исключение
caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Safari"); //Чтобы запустить Safari
Осталось инициализировать драйвер iOS.
Импорт:
import io.appium.java_client.ios.IOSDriver;
import java.net.URL;
Инициализация:
IOSDriver driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"),caps);
Теперь можно писать тест, используя TestNG:
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.remote.MobileCapabilityType;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class TestAppIication {
IOSDriver driver;
@BeforeClass
public void setUp() throws MalformedURLException{
//Задаем desired capabilities
DesiredCapabilities caps = new DesiredCapabilities();
File app=new File("path of the .app");
caps.setCapability(MobileCapabilityType.APP,app);
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1");
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone 5");
caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Safari");// при работе с веб-приложением
driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
}
@Test
public void testExample(){
//здесь будет сам тест
}
@AfterClass
public void tearDown(){
driver.closeApp();//для нативных или гибридных приложений
//driver.quit(); //для веб-приложений
}
}
Автоматизация нативных приложений
Android
Ниже пример автоматизации калькулятора Android. В примере мы пробуем сложить два числа.
- Обновите desired capabilities в методе setup(), чтобы запустить калькулятор:
caps.setCapability("avd","AVD_Nexus_4");// Mention the created AVD name caps.setCapability(MobileCapabilityType.APP_PACKAGE, "com.android.calculator2"); caps.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.android.calculator2.Calculator");
- Теперь на нужно найти два числа. Будем искать их по name:
WebElement five=driver.findElement(By.name("5")); WebElement four=driver.findElement(By.name("4"));
- Также, нужно найти знаки "+" и "="; будем искать по AccessabilityID:
WebElement plus=driver.findElement(By.name("+")); WebElement equalTo=driver.findElementByAccessibilityId("equals"));
- Теперь, кликаем:
five.click(); plus.click(); four.click(); equalTo.click();
- Запустите свой тест, используя TestNG:
public class TestAppIication { AndroidDriver driver; @BeforeClass public void setUp() throws MalformedURLException{ DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4"); caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android"); caps.setCapability(MobileCapabilityType.DEVICE_NAME, "Android emulator"); caps.setCapability("avd","AVD_Nexus_4");// Mention the created AVD name caps.setCapability(MobileCapabilityType.APP_PACKAGE, "com.android.calculator2"); caps.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.android.calculator2.Calculator"); driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps); driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); } @Test public void testExample(){ WebElement five=driver.findElement(By.name("5")); five.click(); WebElement plus=driver.findElement(By.name("+")); plus.click(); WebElement four=driver.findElement(By.name("4")); four.click(); WebElement equalTo=driver.findElementByAccessibilityId("equals")); equalTo.click(); } @AfterClass public void tearDown(){ driver.closeApp(); } }
iOS
Ниже пример работы с приложением TestApp; его можно скачать отсюда. После скачивания, разархивируйте его.
В этом примере попробуем сложить два числа:
- Обновите метод setup(), чтобы запустить TestApp:
File app=new File("/Users/mhans/appium/ios/TestApp.app");//You can change it with your app address caps.setCapability(MobileCapabilityType.APP,app);
- Теперь нужно найти элементы для ввода чисел; будем искать по name:
WebElement editBox1=driver.findElement(By.name("TextField1")); WebElement editBox2=driver.findElement(By.name("TextField2"));
- Затем, найдем кнопку compute; используем AccessibilityID:
WebElement computeSumBtn=driver.findElementByAccessibilityId("Compute Sum"));
- Введем значение в первое поле:
editBox1.sendKeys("10");
- Введем значение во второе:
editBox2.sendKeys("20");
- Теперь, клик по кнопке Compute Sum:
computeSumBtn.click();
- Запустите свой тест, используя TestNG:
public class TestAppIication { IOSDriver driver; @BeforeClass public void setUp() throws MalformedURLException{ File app=new File("/Users/mhans/appium/ios/TestApp.app");//You can change it with your app address DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability(MobileCapabilityType.APP,app); caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1"); caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS"); caps.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone 5"); driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps); driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); } @Test public void testExample(){ WebElement editBox1=driver.findElement(By.name("TextField1")); editBox1.sendKeys("10"); WebElement editBox2=driver.findElement(By.name("TextField2")); editBox2.sendKeys("20"); WebElement computeSumBtn=driver.findElementByAccessibilityId("Compute Sum")); computeSumBtn.click(); } @AfterClass public void tearDown(){ driver.closeApp(); } }
Работа с веб-приложениями
Android
В качестве примера, возьмем поисковую страницу Google. Для работы будем использовать нативный браузер Android:
- Обновите метод setup() для запуска браузера:
caps.setCapability("avd","AVD_Nexus_4"); caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Browser");
- Теперь нужно перейти на www.google.com:
driver.get("https://www.google.com");
- Нужно найти элемент searchBox; искать будем по name:
WebElement searchBox=driver.findElement(By.name("q"));
- Затем, введем поисковый запрос:
searchBox.sendKeys("Appium for mobile automation");
- Запустите свой тест, используя TestNG:
public class TestAppIication { AndroidDriver driver; @BeforeClass public void setUp() throws MalformedURLException{ DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Browser"); caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4"); caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android"); caps.setCapability(MobileCapabilityType.DEVICE_NAME, "Android emulator"); caps.setCapability("avd","AVD_Nexus_4");// Mention the created AVD name driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps); driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); } @Test public void testExample() { driver.get("https://www.google.com"); WebElement searchBox=driver.findElement(By.name("q")); searchBox.sendKeys("Appium for mobile automation"); } @AfterClass public void tearDown(){ driver.quit(); } }
iOS
В качестве примера, возьмем поисковую страницу Google. Для работы будем использовать нативный браузер Safari:
- Обновите метод setup(), чтобы запустить Safari:
caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Safari");
- Нужно перейти на www.google.com:
driver.get("https://www.google.com");
- Затем, найти поисковую строку (по name):
WebElement searchBox=driver.findElement(By.name("q"));
- В поисковую строку отправить запрос:
searchBox.sendKeys("Appium for mobile automation");
- Запустите свой тест, используя TestNG:
public class TestAppIication { IOSDriver driver; @BeforeClass public void setUp() throws MalformedURLException{ DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Safari"); caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1"); caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS"); caps.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone 5"); driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps); driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); } @Test public void testExample(){ driver.get("https://www.google.com"); WebElement searchBox=driver.findElement(By.name("q")); searchBox.sendKeys("Appium for mobile automation"); } @AfterClass public void tearDown(){ driver.quit(); } }
Автоматизация гибридных приложений
Android
Для изучения, используем testApp. Его можно скачать отсюда. Перед работой с гибридными приложениями, нужно выполнить шаги инструкции.
- Обновите метод setup(), чтобы запустить приложение:
File app=new File("C:\\Appium_test\\testApp.apk"); caps.setCapability(MobileCapabilityType.APP,app); caps.setCapability("avd","AVD_Nexus_4"); caps.setCapability(MobileCapabilityType.APP_PACKAGE, " com.example.testapp"); caps.setCapability(MobileCapabilityType.APP_ACTIVITY, " MainActivity");
- Нам нужно найти поле для ввода нашего URL (https://www.google.com), найдем его по ID:
WebElement editBox=driver.findElement(By.id("com.example.testapp:id/urlField")); editBox.sendKeys("https://www.google.com");
- Теперь найдем кнопку Go:
WebElement goButton=driver.findElement(By.name("Go"));
- Кликаем на кнопку:
goButton.click();
- Теперь нужно переключить контекст:
Set<String> contexts = driver.getContextHandles(); for (String context : contexts) { System.out.println(context); //выведет список контекстов вроде NATIVE_APP или WEBVIEW_com.example.testapp }
- Переключаемся на web_view:
driver.context("WEBVIEW_com.example.testapp");
или так:
driver.context((String) contextNames.toArray()[1]);
- Теперь можно работать с веб-страницей Google. Можем кликнуть на вкладку Images и найти элемент по linkText:
WebElement images=driver.findElement(By.linkText("Images")); images.click();
- Запустите свой тест, используя TestNG:
public class TestAppIication { AndroidDriver driver; @BeforeClass public void setUp() throws MalformedURLException{ DesiredCapabilities caps = new DesiredCapabilities(); File app= new File("/Users/mhans/appium/ios/webViewApp. app"); caps.setCapability(MobileCapabilityType.APP,app"); caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4"); caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android"); caps.setCapability(MobileCapabilityType.DEVICE_NAME, "Android emulator"); caps.setCapability("avd","AVD_Nexus_4");// Mention the created AVD name caps.setCapability(MobileCapabilityType.AUTOMATION_NAME, "Appium");//Use Selendroid in case of <4.4 android version caps.setCapability(MobileCapabilityType.APP_PACKAGE, "com.example.testapp"); caps.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.example.testapp.MainActivity"); driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps); driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); } @Test public void testExample(){ WebElement editBox=driver.findElement(By.id("com.example.testapp:id/urlField")); editBox.sendKeys("https://www.google.com"); WebElement goButton=driver.findElement(By.name("Go")); goButton.click(); Set<String> contexts = driver.getContextHandles(); for (String context : contexts) { System.out.println(context); } driver.context((String) contexts.toArray()[1]); WebElement images=driver.findElement(By.linkText("Images")); images.click(); } @AfterClass public void tearDown(){ driver.closeApp(); } }
iOS
Здесь возьмем, для примера, WebViewApp. Скачать можно отсюда. После скачивания, разархивируйте приложение:
- Обновите метод setup(), чтобы запустить приложение:
File app=new File("/Users/mhans/appium/ios/WebViewApp.app"); caps.setCapability(MobileCapabilityType.APP,app);
- Нужно найти поисковую строку чтобы передать туда URL (https://www.google.com). Давайте найдем ее по className:
WebElement editBox=driver.findElement(By.className("UIATextField")); editBox.sendKeys("www.google.com");
- Теперь, по name найдем кнопку Go:
WebElement goButton=driver.findElement(By.name("Go"));
- Клик:
goButton.click();
- Теперь нужно получить список контекстов:
Set<String> contexts = driver.getContextHandles(); for (String context : contexts) { System.out.println(context); }
- И переключиться для работы с web_view:
driver.context("WEBVIEW_com.example.testapp");
или
driver.context((String) contextNames.toArray()[1]);
- Теперь можно работать с веб-страницей Google. Можем кликнуть на вкладку Images и найти элемент по linkText:
WebElement images=driver.findElement(By.linkText("Images")); images.click();
- Запустите свой тест, используя TestNG:
public class TestAppIication { IOSDriver driver; @BeforeClass public void setUp() throws MalformedURLException{ DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1"); caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS"); caps.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone 5"); driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps); driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); } @Test public void testExample(){ WebElement editBox=driver.findElement(By.className("UIATextField")); editBox.sendKeys("https://www.google.com"); WebElement goButton=driver.findElement(By.name("Go")); goButton.click(); Set<String> contexts = driver.getContextHandles(); for (String context : contexts) { System.out.println(context); } driver.context((String) contexts.toArray()[1]); WebElement images=driver.findElement(By.linkText("Images")); images.click(); } @AfterClass public void tearDown(){ driver.closeApp(); } }
На этом все. В следующей главе, мы посмотрим особенности работы с реальными устройствами
Поделиться с друзьями