Вступление

Объекты тестирования - одна из самых важных частей построения успешного проекта автоматизации. Некоторые из них статичны (не изменяются вообще), а некоторые - динамические (зависят от некоторых динамически изменяющихся параметров). В этом руководстве показаны различные подходы к работе с разными типами тестовых объектов.

Требования

Вы должны иметь возможность писать свои тесты в режиме просмотра сценариев. Вы также должны знать основы Java / Groovy.

Статические объекты

Со статическими объектами очень легко обращаться. Просто перейдите в репозиторий объектов, выберите «Новый тестовый объект» и используйте свой любимый селектор (я предпочитаю XPath, поэтому все мои примеры будут для XPath, но подход такой же и для других селекторов). Сохраните свой элемент и используйте встроенный статический метод Katalon findTestElement (String pathInRepository), чтобы получить тестовый объект.

Динамические объекты

С динамическими объектами работать немного сложнее, чем со статическими, но это не так сложно, как может показаться. Существует способ Katalon для обработки параметризованных объектов, но я хочу представить другие возможные подходы.

Определите свой тестовый объект прямо в тестовом примере

Самый простой способ определить тестовый объект. См. Пример кода ниже:

import com.kms.katalon.core.testobject.ConditionType
import com.kms.katalon.core.testobject.TestObject
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
String dynamicId = ‘Katalon123’
String xpath = ‘//div[@id=”’ + dynamicId + ‘“]’
TestObject to = new TestObject(“objectName”)
to.addProperty(“xpath”, ConditionType.EQUALS, xpath)
WebUI.click(to)

Не считая операторов импорта, первые две строки просты - создайте строковую переменную dynamicId и поместите ее в другую строку - xpath. Волшебство происходит в следующих двух строках. Вы создаете новый экземпляр TestObject (назовем его to). Затем вы назначаете свой селектор этому новому объекту тестирования с помощью метода addProperty (String selectorType, ConditionType type, String selectorValue). Наконец, вы используете тестовый объект непосредственно в ключевых словах Katalon по умолчанию. Подробнее о ConditionType см. Документация по API.

Легко, не правда ли? Что ж, да, но у этого решения есть и минусы. Его трудно поддерживать, особенно когда ваш XPath часто меняется и когда вы создаете один и тот же тестовый объект в нескольких тестовых примерах.

Создайте отдельное ключевое слово для динамических селекторов

Лучший способ работать с динамическими селекторами - выделить их в отдельные ключевые слова. В вашем тестовом проекте может быть несколько ключевых слов, по одному для одной страницы или около того. Это тебе решать.

Я покажу простое ключевое слово, содержащее динамические селекторы.

package mypackage
public class MySelectors {
public static final String dynamicIdPath = ‘//div[@id=”%s”]’
}

Как видите, здесь тот же путь, что и в предыдущем примере, но есть небольшая разница. Вместо переменной я использую подстановочный знак % s для метода String.format (). Давайте соответствующим образом обновим наш исходный тестовый пример.

import com.kms.katalon.core.testobject.ConditionType
import com.kms.katalon.core.testobject.TestObject
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
import mypackage.MySelectors
String dynamicId = ‘Katalon123’
String xpath = String.format(MySelectors.dynamicIdPath, dynamicId)
TestObject to = new TestObject(“objectName”)
to.addProperty(“xpath”, ConditionType.EQUALS, xpath)
WebUI.click(to)

Как видите, единственное изменение - в строке, определяющей xpath. Если вы не знакомы с String.format (), обратитесь к документации Java.

В качестве альтернативы вы можете использовать свой собственный подстановочный знак в значении селектора. Затем используйте String.replace () вместо String.format ().

public static final String dynamicIdPath = ‘//div[@id=”<<dynamicId>>”]’
// a line in test case:
String xpath = MySelectors.dynamicIdPath.replace(“<<dynamicId>>”, dynamicId)

Преимущество хранения динамических селекторов в отдельных ключевых словах состоит в том, что вы храните все селекторы в одном месте. Когда селектор изменяется, вы меняете только одно место, а не все тесты, в которых вы его используете.

Создайте метод, который возвращает динамический тестовый объект

Теперь мы расширяем ключевое слово MySelectors, добавляя новый метод для возврата TestObject. Это устранит несколько строк кода в вашем тестовом примере, что сделает его более удобным в обслуживании.

package mypackage
import com.kms.katalon.core.testobject.ConditionType
import com.kms.katalon.core.testobject.TestObject
public class MySelectors {
public static final String dynamicIdPath = ‘//div[@id=”%s”]’
public static TestObject getMyTestObject(String selectorType, String selectorValue) {
TestObject to = new TestObject()
to.addProperty(selectorType, ConditionType.EQUALS, selectorValue)
return to
}
}

И наш тестовый пример будет выглядеть так:

import com.kms.katalon.core.testobject.ConditionType
import com.kms.katalon.core.testobject.TestObject
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
import mypackage.MySelectors
String dynamicId = ‘Katalon123’
String xpath = String.format(MySelectors.dynamicIdPath, dynamicId)
WebUI.click(MySelectors.getMyTestObject(“xpath”, xpath))

Поскольку наш новый метод возвращает TestObject, мы можем вызывать его напрямую, используя ключевые слова Katalon по умолчанию. В тестовом случае вам не нужно беспокоиться о создании нового экземпляра TestObject. Вы можете настроить его по своему усмотрению, вы можете добавить дополнительные параметры в этот метод (например, ConditionType) или упростить его, передав только экземпляр TestObjectProperty.

Заключение

Основная идея этого руководства заключается в том, что существует несколько различных подходов к работе с динамическими селекторами. В этом руководстве представлены несколько примеров (более или менее сложных), которые могут помочь вам в этой теме. Уверен на 100%, что есть и более эффективные способы, как это сделать, буду рад, если вы поделитесь собственным подходом.

Для получения дополнительной информации см. 10 лучших инструментов тестирования API в 2020 году или Обзор лучших инструментов автоматизации тестирования за 2020 год.

Об авторе
Марек Мелочик в настоящее время работает инженером по автоматизации тестирования в Брно, Чешская Республика. Он работает в индустрии тестирования с 2014 года.
Познакомьтесь с Мареком на www.linkedin.com/in/marek-melocik