- PVSM.RU - https://www.pvsm.ru -
Привет. Я вернулся и подготовил для вас перевод 4й главы книги по Appium.
Если вы только включились, тут у нас предыдущие 3 главы:
Глава 4. Поиск элементов по разным локаторам
У Appium есть несколько способов локализовать элементы в мобильном приложении. В этой главе, некоторые техники поиска элементов для нативных и гибридных приложений, с использованием uiautomator и Appium inspector. Чтобы определять элементы в web-приложениях, мы рассмотрим add-on для Chrome, чтобы удаленно локализовать элементы.
В этой главе:
Для поиска элементов в web-приложении, необходимо установить add-on. Браузер Chrome предоставляет ADB (add-on) к исходному коду [разметке] мобильного приложения. Скачать можно отсюда [4].
Установив add-on, выполните следующие шаги для подключения устройства:
Safari поставляется со встроенным решением для поиска элементов, нам остается только выполнить несколько шагов, чтобы подготовить девайс к удаленной отладке:
Для взаимодействия с веб-страницей, сперва нам потребуется найти элементы на ней. Всем функциям клиента Appium client требуется какой-либо инструмент для работы с веб-страницей.
Поиск элемента по ID используется для поиска одного конкретного элемента в приложении.
findElement(By.id(String id));
Нам нужно передать ID элемента, с которым мы хотим работать. Теперь давайте узнаем ID элемента, используя плагин Chrome ADB. Ниже приведен пример работы со страницей поиска Google:
Мы можем использовать выделенный id для взаимодействия с веб-элементом. Пример использования команды:
WebElement searchBox=driver.findElement(By.id("lst-ib"));
Если хотите ввести текст в поисковую строку, используйте переменную. Например, вот так:
searchBox.sendKeys("Manoj Hans");
Теперь давайте посмотрим этот же пример для работы с Safari на iOS device. Нужно выполнить следующие шаги:
Еще один способ обнаружить элемент — поиск по имени; вот так будет выглядеть соответствующий метод:
findElement(By.name(String Name));
Как и в случае с id, нам нужно передать имя элемента, который мы ищем. Вернется экземпляр класса WebElement, с которым мы и будем дальше работать. Снова обратимся к примеру с Google, у поисковой строки, кроме id, есть еще и имя. Шаги такие же, как в работе с ID:
Вот как будет выглядеть команда:
WebElement searchBox=driver.findElement(By.name("q"));
Этот метод полезен, когда вы ищите на странице ссылку. Сигнатура метода:
findElement(By.linkText(String text));
Нужно передать текст, который должен быть у искомой ссылки. Так же, вернется экземпляр WebElement.
Мы попробуем найти ссылку на странице Google, у которой текст — «Images»:
WebElement imagesLink=driver.findElement(By.linkText("Images"));
Xpath работает и с XML и с HTML структурами для поиска элементов. Он чуть медленнее, чем методы работ с ID и именем, но это — очень хороший способ найти элемент на странице, где ID генерируется автоматически. Мы не будем подробного изучать Xpath, по необходимости, поищите туториал в Google. Сигнатура метода:
findElement(By.xpath(String XPath));
Необходимо передать Xpath для элемента, который мы ищем. Здесь мы построили Xpath, опираясь на атрибуты:
WebElement searchBox=driver.findElement(By.xpath("//input[@id='lst-ib']"));
cssSelector работает строго с HTML, и он быстрее Xpath. Сигнатура метода:
findElement(By.cssSelector(String cssSelector);
В метод необходимо передать селектор элемента.
Построим cssSelector поисковой строки Google:
WebElement searchBox=driver.findElement(By.cssSelector("#lst-ib"));
Есть множество способов найти элементы для нативных и гибридных приложений, такие как UIAutomatorviewer (для Android) и Appium Inspector. Начнем с первого.
UIAutomatorviewer можно найти в папке Android SDK (C:%android-sdk%tools); на Mac можно найти в папке tools:
При открытии, вы увидите такой экран:
Рассмотрим пример со стандартным калькулятором Android:
Теперь нужно найти элементы приложения, используя разные локаторы.
Сигнатура метода такая же, как поиск элемента по ID в web-приложении:
findElement(By.id(String id));
В метод передается ID элемента, с которым мы хотим работать. Ниже пример идентификации клавиши «5» в калькуляторе с использованием UI Automator Viewer:
WebElement digit_5=driver.findElement(By.id("com.android.calculator2:id/digit5"));
digit_5.click();
Сигнатура метода нам уже знакома:
findElement(By.name(String Name));
Нужно передать имя элемента, с которым хотим работать. Ниже пример поиска кнопки DELETE:
delete.click();
WebElement delete=driver.findElement(By.name("DELETE"));
Сигнатура:
findElement(By.className(String ClassName));
Ниже пример поиска окна ввода по className:
WebElement editBox=driver.findElement(By.className("android.widget.EditText"));
editBox.getText();
Если этот класс используется для нескольких элементов, мы можем обратиться к элементу по индексу в возвращаемой коллекции. Например, мы хотим обратится к клавише «7» по имени класса:
List<WebElement> editBox=driver.findElements(By.className("android.widget.Button"));
editBox.get(1).click();
Мы использовали метод findElements вместо findElement; так мы получим больше одного элемента по селектору. В нашем примере, у клавиши «7» значение индекса — 1. Поэтому, мы обратились к 1му элементу.
Разработчики Appium хотели дать нам больше возможностей для локализации элементов, поэтому они создали AccessibilityId. Этот локатор определяет элементы так же, как ID и name. Сигнатура метода:
findElement(By.AccessibilityId(String AccId));
Ниже пример взаимодействия к кнопкой "+":
WebElement plusSign=driver. findElementByAccessibilityId("plus");
plusSign.click();
AndroidUIAutomator очень мощный локатор. Он использует библиотеку Android UIAutomator для поиска элементов.
findElement(By.AndroidUIAutomator(String UIAuto));
Ниже пример взаимодействия с кнопкой "=":
WebElement equal=driver. findElementByAndroidUIAutomator("new UiSelector().resourceId("com.android.calculator2:id/equal")";
WebElement equal=driver. findElementBy.AndroidUIAutomator("new UiSelector().description("equals")");
Чтобы узнать больше об этом локаторе, посетите эту [7] и эту [8] страницу.
В предыдущей главе мы уже узнали, что Appium Inspector хорошо работает на Mac. Работая на Mac, мы можем его использовать для поиска элементов. Чтобы запустить Appium Inspector для Android, нам нужно выполнить следующие шаги:
Мы уже изучили много способов нахождения элементов. Сейчас мы воспользуемся поиском по Xpath
Сигнатура:
findElement(By.xpath(String XPath));
Ниже пример работы с клавишей «9»:
WebElement digit_9=driver.findElement(By.xpath("//android.widget.LinearLayout[1]/ android.widget.FrameLayout[1]/ android.widget.LinearLayout[1]/ android.support.v4.view.viewPager[1]/ android.widget.LinearLayout[1]/ android.widget.LinearLayout[1]/ android.widget.Button[3]"));
Вы можете работать с переменной digit_9, чтобы взаимодействовать с элементом.
Теперь о том, как работать с Appium Inspector для iOS:
В примере мы будем работать с TestApp, его можно скачать с Appium GitHub [10].
Сигнатура метода:
findElement(By.name(String Name));
Ниже пример работы со вторым EditBox в приложении TestApp:
WebElement editBox=driver.findElement(By.name("IntegerB"));
editBox.sendKeys("12");
UIAutomation — JavaScript библиотека, использующаяся для поиска элементов в Apple's Automation Instruments. Разработчики Appium дали нам похожий способ поиска элементов в Appium, используя IosUIAutomation:
findElements(By.IosUIAutomation(String IosUIAuto));
Для того, чтобы начать использовать IosUIAutomation, нужно:
WebElement editBox=driver. findElements(By.IosUIAutomation(".elements()[0]")); //Здесь '0' - это индекс элемента
editBox.sendKeys("10");
WebElement editBox=driver. findElements(By.IosUIAutomation(".textFields()[0]"));
Чтобы узнать больше о библиотеке UIAutomation, посетите эту [11] страницу.
Автор: Дмитрий Еремин
Источник [12]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/testirovanie/259987
Ссылки в тексте:
[1] Что такое Appium и как он работает: https://habrahabr.ru/post/331224/
[2] Настраиваем окружение: https://habrahabr.ru/post/331248/
[3] Изучаем Appium сервер: https://habrahabr.ru/post/331714/
[4] отсюда: https://chrome.google.com/webstore/detail/adb/dpngiggdglpdnjdoaefidgiigpemgage?hl=en-GB
[5] www.google.com: http://www.google.com
[6] www.google.com: https://www.google.com
[7] эту: http://developer.android.com/tools/testing/testing_ui.html
[8] эту: http://developer.android.com/tools/help/uiautomator/UiSelector.html
[9] APK Info: https://play.google.com/store/apps/details?id=de.migali.soft.apkinfo&hl=en
[10] Appium GitHub: https://github.com/appium/appium/blob/master/assets/TestApp7.1.app.zip?raw=true
[11] эту: https://developer.apple.com/library/ios/documentation/ToolsLanguages/Reference/UIAElementClassReference/index.html#//apple_ref/doc/uid/TP40009903-CH1-SW6
[12] Источник: https://habrahabr.ru/post/332706/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.