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