В предыдущем проекте я должен использовать изящный инструмент под названием OpenTest Чтобы организовать автоматизацию тестирования в приложении Android. Это еще не широко популярная рамка, но я надеюсь, что она вырастет, потому что она очень хорошо решает одну конкретную проблему. OpenTest позволяет команде QA писать тесты Однажды Это может пройти через несколько сред и платформ. Это солидный инструмент, если вы хотите сделать что -то вроде автоматизации приложения для iOS и Android, которое имеет идентичные пользовательские интерфейсы, или просто хотите общий язык для ваших веб -и мобильных приложений. OpenTest также написан в YAML, поэтому он доступен даже для довольно младших команд SDET, и он содержит множество действий, основанных на ключевых словах, которые делают тесты пользовательского интерфейса простыми для сочинения.
В большинстве случаев вы просто структурируете тесты, как это:
- description: Verify Text is Accurate
action: org.getopentest.appium.AssertElementText
args:
locator: $data("locators/view").area.element
text: 'Whatever text I expect to see'
В большинстве случаев вы можете найти элементы по их id или Текст Свойства, но в тех случаях, когда вам необходимо построить пользовательские локаторы на лету, может быть полезно знать, как Opentest интерпретирует JavaScript.
JavaScript может быть динамически вставлен в тесты Opentest с использованием Скрипт Tag, и если бар ( ) вставлен в первую строку, то все, следующее, он интерпретируется как JavaScript, так что вы можете использовать многострочные блоки JavaScript. Для получения дополнительной информации о поддержке сценариев в OpenTest, Прочитайте документы Анкет
На данный момент все, что вам нужно знать, это то, что JavaScript может быть динамически вставлен в любом месте теста, и что вы можете вызвать все свои основные Действия как AsserTelementText с помощью специального $ runaction Команда в ваших блоках JavaScript.
Давайте представлю пример интерфейса для администратора, просматривающего систему управления сотрудниками, которая перечисляет сотрудников и имеет кнопку «сбросить пароль» рядом с их именами. Допустим, в системе есть только два сотрудника, Таз и Джулия.
В этом примере у нас есть локаторы в нашем Opentest /данные Репозиторий, который соответствует элементам в интерфейсе.
Таз и Джулия появляются в моей системе управления сотрудниками, и рядом с каждым из их имен я вижу кнопку для сброса их паролей. У нас будет два отдельных локатора для двух кнопок «Сброс пароля». Чтобы проверить это, мне нужно найти строку с их именем в нем, и Тогда Найдите соответствующую кнопку сброса пароля, чтобы выбрать. Мы можем использовать Строка Согласование Чтобы напрямую вставить имя каждого человека в локатор XPath.
tazBtn: { xpath: "//ClassName[@resource-id='personRow' and @text='Taz']/following-sibling::android.widget.Button[@resource-id='passwordResetButton']" }
juliaBtn: { xpath: "//ClassName[@resource-id='personRow' and @text='Julia']/following-sibling::android.widget.Button[@resource-id='passwordResetButton']" }
OpenTest делает хорошую работу по отделению логики тестирования от тестовых данных. Ссылки на строки данных, числа и другие значения могут быть включены в тесты, используя ссылки, отформатированные как: $ data ("имя файла"). Parent.child Анкет
Вот пример объявления текстовой метки напрямую, а затем использования значения, объединенного в идентификатор локатора.
- description: Verify Text Label
script: |
var label = "Some text.";
$runAction("org.getopentest.appium.AssertElementVisible",
{
locator: "//android.widget.TextView[@text='" + label + "']"
});
Важно помнить, что прямая конкатенация строки не будет работать в ваших строках локатора, вам нужно явно объявить новую переменную для строки, которую вы используете в верхней части нашего блока JavaScript.
Вот пример, который показывает, как структурировать какой -то код, который опирается на вставку $ data Значение в Текст свойство, чтобы мы могли ввести его в поле. В этом случае мы выводим из списка продуктов в нашем $ data каталог.
- description: Enter product name into text field
script: |
var textToEnter = $data("products").product1.name
$runAction("org.getopentest.appium.SendKeys", {
locator: $data("locators/form").input,
text: textToEnter
});
У вас может быть соблазн определить свой Текст Значение непосредственно с $ data ценность, но это не сработает, и вы должен Явно определите это значение сначала в переменной в верхней части блока JavaScript.
Я надеюсь, что это спасает кого -то немного разочарования. Если вы используете OpenTest в проекте, я бы хотел услышать, что вы думаете об этом на Twitter Анкет
Оригинал: “https://dev.to/samelawrence/constructing-custom-locators-in-opentest-44hm”