Если вы когда-либо пробовали использовать Selenium для автоматизации тестирования приложения Salesforce, вы, вероятно, знаете, насколько это непросто.
Selenium — это потрясающий инструмент для автоматизации тестирования браузерных приложений. Однако приложения Salesforce более сложные по сравнению с большинством веб-приложений, поскольку в них используются теневые DOM и динамические элементы, включая iframe.
Без надлежащего фреймворка с большим количеством собственного кода автоматизация тестирования Salesforce превращается в настоящий кошмар!
Впрочем, не стоит переживать: я нашел бесплатный инструмент со встроенной поддержкой автоматизированного тестирования Salesforce.
Но прежде чем перейти к нему, давайте рассмотрим некоторые проблемы, с которыми вы, скорее всего, столкнетесь при автоматизации тестирования Salesforce и подобных программных решений.
Динамические элементы
Почти ничто не раздражает инженера по автоматизации больше, чем пользовательский интерфейс с динамическими элементами, которые меняют свои локаторы при каждом запуске скрипта тестирования.
Для приложений на базе Salesforce такое поведение является нормой.
В одном прогоне может быть идентификатор gino1
, а в следующем уже gabagool5
.
Обнаружить какую-либо логику или закономерность смены имен попросту невозможно. Имена изменяются динамически и непредсказуемым образом.
Что же нам делать?
Можно разработать сложную стратегию определения локаторов элементов, в рамках которой несколько элементов будут складываться вместе для идентификации поля, но даже эта стратегия будет ненадежной в некоторых случаях.
Проблема еще больше усугубляется, когда тестируемое приложение содержит динамические элементы iframe.
Элементы iframe
Элементы iframe (встроенные фреймы) представляют собой HTML-документы, внедренные в другую HTML-страницу.
Элементы iframe используются для вставки на веб-страницу контента из внешнего источника, например проигрывателя подкастов:
С iframe сложно работать, потому что системе Selenium необходимо идентифицировать элементы во фрейме, что не всегда является простой задачей.
Не каждый инженер способен написать код для обработки такой ситуации.
Selenium умеет переключаться между несколькими iframe с помощью команды драйвера switchTo().frame.
//Store the web element
WebElement iframe = driver.findElement(By.cssSelector("#modal>iframe"));
//Switch to the frame
driver.switchTo().frame(iframe);
//Now we can click the button
driver.findElement(By.tagName("button")).click();
Это все замечательно, но я обнаружил, что мало кто из инженеров по автоматизации знает, как использовать эти методы с максимальной надежностью.
Помимо iframe есть еще кое-что, что может вызвать затруднения при автоматизации тестирования — это теневые DOM.
Теневые DOM
Одним из популярных трендов в современной разработке веб-компонентов является применение теневых DOM.
В этом случае автоматизация может быть проблематичной, так как при таком подходе возможны связи между элементами стандартной DOM и скрытыми DOM-деревьями, а это означает, что до многих элементов не получится добраться явным образом, создав скрипт типа «указать и щелкнуть».
Разработчики также часто добавляют собственные HTML-теги.
Selenium не может напрямую идентифицировать подобные HTML-теги в теневой DOM.
Конечно, некоторые проблемы работы с теневыми DOM в Selenium можно обойти, используя метод JavascriptExecutor, но в результате получаются громоздкие и трудные для поддержки решения и значительно возрастает общая сложность скрипта.
Существуют плагины, которые могут помочь в этом деле, например shadow-automation-selenium.
Но опять же, их применение требует дополнительных усилий. Вам придется добавить библиотеку в POM-файл системы Maven и выучить необходимый синтаксис.
Такие подходы могут лечь тяжким бременем на плечи новичка в сфере автоматизации.
Разумеется, вы можете написать код для преодоления большинства из этих сложностей, если у вас есть время.
Но я знаю инженеров, которые посвящают много времени этой проблеме и до сих пор не могут выработать окончательное решение.
Как вы смотрите на вариант решить описанные проблемы с помощью бесплатного решения для тестирования?
Я как раз нашел одно такое решение — оно называется TestProject.
Тестирование приложений Salesforce с помощью TestProject
Эльдар Кравецкий (Eldar Kravetsky), технический директор и соучредитель TestProject, сказал мне, что приложения на базе Salesforce послужили отличным предметом для экспериментов при разработке нового улучшенного рекордера тестовых сценариев. Разработчики TestProject поняли, что если они смогут автоматизировать тестирование Salesforce, то их рекордер, вероятно, справится с автоматизацией чего угодно.
Многие проблемы, связанные с автоматизацией тестирования Salesforce и решаемые с помощью TestProject, также относятся и к другим приложениям, разработанным в codeless-средах, таких как SAP, ServiceNow и др.
Как я упоминал ранее, можно написать свои собственные тесты в Selenium или же непосредственно в TestProject, но не все обладают нужными навыками.
С другой стороны, можно просто воспользоваться новым рекордером, который незаметно для вас преодолеет все сложности и позволит создать необходимые сценарии автоматизации.
Итак, каким образом TestProject справляется с упомянутыми выше проблемами, которые присущи приложениям типа Salesforce?
Как TestProject работает с iframe?
В Selenium есть концепция контекста.
Сперва нужно переключиться в iframe, а затем отслеживать, в каком контексте работает ваш скрипт в тот или иной момент времени.
TestProject отслеживает это автоматически и обеспечивает отправку команд в нужный контекст без необходимости писать для этого код.
Рекордер записывает каждое действие, совершаемое в приложении с элементами iframe. При выполнении тестов он автоматически распознает нужный iframe, на который ему нужно переключиться.
Написание дополнительного кода не требуется, так что во время записи сценария тестирования об этом можно не беспокоиться.
TestProject построен на базе Selenium и Appium, поэтому он умеет использовать методы API Selenium и расширять их без вмешательства со стороны пользователя.
Когда я работал на крупном предприятии с восемью спринт-командами, они всегда создавали flaky-тесты, потому что не знали, как правильно писать код, чтобы правильно обрабатывать ситуацию смены контекста в тестовом сценарии.
Если вы инженер по автоматизации среднего или продвинутого уровня, не беспокойтесь: речь не о каком-то черном ящике.
На каждом шаге доступны расширенные настройки, в которых можно увидеть, существует ли какой-либо дополнительный контекст, например iframe.
Таким образом, вам доступны расширенные возможности управления, если в процессе настройки нужно что-то скорректировать или изменить.
Как TestProject работает с теневыми DOM?
Новый рекордер TestProject также умеет обрабатывать теневые DOM, активно используемые в Salesforce и других приложениях.
В случае с теневой DOM обычно сначала вы видите один элемент, а при перемещении курсора — уже другой. Поэтому даже если вы запишете свои действия, у вас не получится их воспроизвести, поскольку нужные элементы исчезают.
В большинстве случаев рекордер TestProject обрабатывает подобные ситуации за вас автоматически.
Рекордер TestProject обрабатывает все операции взаимодействия с теневой DOM в фоне — вам ни о чем не приходится беспокоиться.
Как TestProject работает с динамическими элементами?
TestProject также упрощает запись тестовых сценариев для приложений, в которых генерируются динамические элементы, изменяющиеся при каждом прогоне. Примером тому опять же являются приложения Salesforce.
Если перед вами встанет задача протестировать приложение Salesforce, вы быстро поймете, что большинство тестируемых элементов являются динамическими. Если вы попытаетесь прогнать ваш тест повторно, он не сработает, поскольку все идентификаторы поменяются.
Посмотрите видео, которое я записал. В нем я демонстрирую возможности рекордера с ИИ при обработке динамических значений.
Во время выполнения рекордер обрабатывает любые изменения идентификаторов элементов, задействуя возможности ИИ. Это позволяет определять нужные поля для взаимодействия и избегать сбоев.
Весьма впечатляюще!
Почему полезно использовать TestProject?
Если вы умеете программировать, то можете написать любую тестовую программу.
Вы можете делать, что душе угодно. И если все будет сделано верно, то полученный результат, вероятно, будет радовать вас длительное время.
Но опять же, для этого нужны навыки, которыми обладает не каждый.
И если вы пишете код самостоятельно, вам потребуется немало времени, чтобы автоматизировать то, что вам нужно.
Ребята из TestProject вложили все свои знания и опыт в решение, позволяющее справиться с автоматизацией таких хитроумных программ, как Salesforce, благодаря чему вам не придется беспокоиться о таких вещах, как теневые DOM, динамические элементы или всплывающие окна.
Почему бы не сэкономить немного времени и не ломать голову понапрасну? Попробуйте это решение и поделитесь своими мыслями.
Всех, кто заинтересован в обучении тестированию приглашаем ознакомиться с нашими курсами, на которые прямо сейчас действует специальное предложение: