1. Фон дизайна
С развитием ИТ-индустрии продукты становятся все более и более сложными, а веб-бизнес и процессы все более громоздкими.В настоящее время тестирование пользовательского интерфейса проводится только для одной страницы, а объем операций велик. Эта программа тестирования автоматизации пользовательского интерфейса разработана для удовлетворения потребностей многостраничных функций и процессов и экономии человеко-часов. Он направлен на предоставление интерфейса и интеграцию в платформу автоматизированного тестирования улитки, чтобы облегчить разработку вариантов использования.
Вся программа разработана на основе селена. Программа повторно инкапсулирует интерфейс, предоставляемый селеном, для соответствия дизайну повседневного варианта использования.Интерфейс после повторной инкапсуляции решает проблемы загрузки элементов, позиционирования и анализа элементов и т. д., что может упростить дизайн варианта использования.
Причина принятия модели Selenium. Первая причина в том, что это фреймворк с открытым исходным кодом для пользователей, и они хотят за ним шпионить; вторая причина в том, что Selenium можно легко подключить. Это инструмент для тестирования веб-приложений, который поддерживает многоплатформенность, многобраузерность и многоязычность для реализации автоматического тестирования.Selenium2 инкапсулирует собственный API браузера в API WebDriver, который может напрямую манипулировать элементами на странице браузера и даже Управляйте самим браузером (скриншотами, размером окна, запуском, завершением работы и т.д.), как будто это делает настоящий пользователь.
В настоящее время поддерживаются: Mac, операционная система Windows, Chrome, Firefox, браузер IE.
2. Принцип работы
- Добавьте тестовые случаи на фоне управления улиткой.
- Snail управляет выполнением фонового тестового примера и вызывает интерфейс выполнения задачи, а также передает программе идентификатор задачи и строку формата JSON тестовых данных.
- Программа анализирует и обрабатывает полученные данные.
- После запуска браузера selenium-webdriver привяжет целевой браузер к определенному порту, а запущенный браузер будет служить сервером вебдрайвера.
- Клиент (то есть тестовый скрипт) отправляет HTTP-запрос на сервер с помощью ComandExecutor (протокол связи: The WebDriver Wire Protocol, в теле HTTP-запроса он будет использовать строку формата JSON, указанную WebDriver Проводной протокол, чтобы сообщить Selenium, мы ожидаем, что браузер сделает что-то дальше).
- Сторона сервера должна полагаться на собственный компонент браузера и преобразовывать команду веб-службы в собственный вызов браузера для завершения операции.
- Наконец, результат обработки и идентификатор задачи возвращаются в Snail в формате строки JSON, а результат выполнения каждого варианта использования можно просмотреть в фоновом режиме управления Snail.
3. Введение в структуру
3.1 Инженерное сооружение
Вызовите соответствующий интерфейс в соответствии с фактическим бизнес-процессом, чтобы реализовать автоматизированный тестовый пример WEB-UI. Слой case может вызывать интерфейс уровня сервиса и уровня pageObject.pageObject — это инкапсуляция каждого элемента страницы, а сервис — это инкапсуляция общей функции бизнес-модуля. Например, тестовый пример для запроса корпоративной информации должен полагаться на вход в систему, и эта бизнес-функция может напрямую вызывать интерфейс в службе. Чтобы создать корпоративный запрос, вы можете вызвать интерфейс в pageObject, а затем, в соответствии с бизнес-процессом запроса, соединить эти интерфейсы вместе в тестовом примере, чтобы сформировать тестовый пример автоматизации пользовательского интерфейса.
Например, деловые запросы. Перед запросом вам необходимо войти в фон управления, операция входа в систему была инкапсулирована в бизнес-уровень, а интерфейс уровня обслуживания вызывается напрямую, не обращая внимания на детали этого шага; после входа в систему вам нужно чтобы указать путь, найти соответствующее пространство и напрямую вызвать интерфейс слоя модели.Вам не нужно обращать внимание на детали этого шага, следующим шагом является создание запроса, и все методы позиционирования для создание запроса также инкапсулировано на бизнес-уровне.Это реализация корпоративного запроса, а также наиболее важная ссылка в дизайне варианта использования.
Весь проект основан на селене и построен с использованием режима pageObject. Ниже представлены несколько важных модулей проекта.
3.1.1 драйвер — уровень интерфейса
Операции над всеми элементами веб-страницы определяются и реализуются в интерфейсе драйвера. Драйвер дважды инкапсулирует интерфейс, предоставляемый селеном, и предоставляет инкапсулированный интерфейс внешнему миру. pageObject реализует некоторые общедоступные методы, такие как присвоение значений полям ввода и т.д. В настоящее время существует не так много методов, инкапсулированных pageObject, и большинство функций можно реализовать через селен. Уровень драйвера дважды инкапсулирует интерфейс инструмента с открытым исходным кодом. Если вы хотите управлять браузером, существует важный инструмент — драйвер браузера. Этот драйвер находится в справочных библиотеках. Версия драйвера должна совпадать с версией тестируемого браузера.
3.1.2 модель — модель данных.
Создание модели данных — это метод, применяемый для разделения тестовых данных и тестовых случаев, и инициализируются конкретные тестовые данные. Элементы, которым нужны тестовые данные в бизнес-процессе, могут быть определены в модели, что удобно для управления и чтения кода.
3.1.3 pageObject — бизнес-уровень
Режим pageObject использует интерфейс для инкапсуляции элементов, которые должна использовать каждая страница.Для реализации инкапсуляции требуется всего два шага:
- Определите, как элемент позиционируется;
- Вызовите соответствующий рабочий интерфейс в драйвере.
Реализация интерфейса драйвера включает в себя определенную отказоустойчивость, но не является комплексной. Некоторые страницы или компоненты уникальны. Простой вызов интерфейса драйвера не может гарантировать стабильность тестового примера. В этом случае необходимо добавить реализация интерфейса pageObject Некоторые отказоустойчивые алгоритмы для обеспечения стабильности варианта использования.
3.1.4 сервис — обеспечивает бизнес-функции.
Бизнес-процесс часто зависит от функций других бизнес-модулей.Чтобы упростить разработку тестового примера и избежать повторного создания колеса, сервисный уровень предоставляет некоторые общие бизнес-функции, такие как вход в систему и корпоративный запрос. Проверяющей стороне нужно только вызвать его на уровне обслуживания.
3.2 Оптимизация функций
Выполняя вторичную инкапсуляцию селена, интерфейс также оптимизируется.Первоначальная цель фреймворка состоит в том, чтобы сделать дизайн вариантов использования пользовательского интерфейса максимально простым в разработке, легко читаемым и простым в обслуживании.
3.2.1 Оптимизация интерфейса
Вызов интерфейса селена напрямую часто наталкивается на некоторые головные боли, например, из-за проблем с сетью загрузка страницы слишком медленная, а элементы, с которыми необходимо работать, не отображаются, в этом случае часто будет ошибка о том, что элемент не может быть найден. быть сообщено, что приводит к вариантам использования.Выполнение не выполняется, но на самом деле эта ошибка не является ошибкой, и результат теста недействителен. Чтобы уменьшить количество ложных срабатываний, интерфейс уровня драйвера разработал функцию ожидания загрузки элементов.Используется ключевой метод: cf.searchForElementVisibleXpath(TestStartQuitwd.wd, "//*[text()='operation логин платформы']", id, 200, 100L). Код ссылки:
Добавление суждения о циклическом поиске в рабочий интерфейс, например щелчок и ввод, может максимизировать ожидание загрузки элемента и повысить стабильность тестового примера.
3.2.2 Единая запись позиционирования элементов
Тестировщики, которые были знакомы с дизайном вариантов использования автоматизации пользовательского интерфейса, будут знать лучше. Если вы хотите управлять элементом через селен, важно описать позиционирование элемента. С точки зрения непрофессионала, это должно уведомить интерфейс, где находится элемент. для работы на текущей странице. Есть много способов найти элемент, обычно используются id, name, css, xpath и т. д. Selenium также предоставляет разные интерфейсы для обработки, соответствующие разным методам позиционирования, что, очевидно, не самое лучшее с точки зрения обслуживания. Наилучший способ заключается в том, чтобы разработчики вариантов использования сосредоточились только на позиционировании элементов и вызове событий операции, и лучше всего не знать и не обслуживать, какой канал принимает событие в реализации. Этот фреймворк инкапсулирует метод для вызова драйвера, основная функция которого состоит в том, чтобы разобрать строку, описывающую элемент, и автоматически определить, является ли он id, css или xpath.
3.3 Расположение элементов
Варианты использования автоматизации пользовательского интерфейса можно разделить на две части: позиционирование элемента и вызов интерфейса для работы с элементом. Есть много способов найти элемент, обычно используются id, name, css, xpath. При фактическом проектировании выбранный метод позиционирования обычно рассматривается больше с точки зрения обслуживания, поскольку текущая конфигурация производительности сервера превосходна, поэтому запуск варианта использования веб-интерфейса не требует учета проблем с производительностью. С точки зрения стоимости обслуживания предпочтительными будут идентификатор и имя, за которыми следуют css и, наконец, xpath.
Мы не можем гарантировать, что все элементы каждой веб-системы могут предоставить уникальный идентификатор или имя, конечно, если мы можем сотрудничать с фронтенд-разработкой, это очень красивая вещь. В общем, нам нужно столкнуться с ситуацией, когда нет атрибутов id и name. В настоящее время мы можем использовать стиль css.Во многих случаях стиль css может удовлетворить наши потребности в позиционировании. Конечно, когда ничего из этого нам не предоставлено, мы можем выбрать только xpath.Преимущества использования xpath:
- Легко получить, пока основные браузеры открывают «Просмотр», их можно легко получить путем копирования;
- Все элементы на странице могут быть описаны с помощью xpath; недостатки, нестабильность и интенсивное использование создадут большую нагрузку на обслуживание варианта использования.
Как правило, до тех пор, пока внешний интерфейс вносит небольшие коррективы на страницу, вариант использования должен поддерживаться повторно.В случае необходимости использования xpath, чтобы уменьшить объем обслуживания в будущем, можно провести некоторые оптимизации сделано на xpath, что позволяет уменьшить длину пути xpath и улучшить стабильность. . Наиболее долго на практике используются следующие типы:
- Используйте собственное позиционирование текста атрибута, например //input[@value='XXXXX']
- Содержит указательные символы, такие как //input[содержит(текст(),'указательные символы')]
- Разумно используйте содержимое, например //*[@id='app-container']
В-четвертых, распространенные ошибки
В процессе использования часто возникают проблемы, вот краткое описание для облегчения отладки.
- Для некоторых всплывающих окон иногда не удается позиционировать всплывающий элемент. Теоретически селен может найти элемент на странице, но иногда появляется всплывающее окно, в это время необходимо переместить всплывающее окно. Решение:
- Некоторые поля ввода не могут правильно управляться интерфейсом ввода. В процессе практики я столкнулся в управлении календарем, позиционирование элемента правильное, но нормально работать с ним не получается. Решение: Определите, относится ли элемент к типу select, а затем назначьте его. Код решения:
3. Обнаружено, что некоторые интерфейсы селена не работают.В настоящее время самая большая вероятность, что браузер был обновлен. Решение: Перезагрузите браузер более ранней версии.
4. Элемент не виден. Есть элемент, который может нормально отображаться на странице, но он не виден инструменту, потому что в целом видимый элемент должен удовлетворять следующим условиям: visible!=hidden ; display!=none; opacity! =0; и высота, и ширина больше 0; для входного тега нет скрытого атрибута. Например, снимок экрана доступен только для чтения.
Решение: вызвать интерфейс TestStartQuitwd.js.executeScript("var txtN = document.getElementsByName("timeRange"); txtN[0].readOnly = false;");
V. Заключение
Автоматизация пользовательского интерфейса оптимизирована на основе инструментов с открытым исходным кодом.Есть еще много возможностей для улучшения решений на уровне драйверов, уровне данных, бизнес-уровне и уровне вариантов использования. Автоматизация WEB-UI не идеальна, и нам нужно продолжать усердно работать на более позднем этапе. Спасибо друзьям, поддержавшим исследование.
Автор: Ян Болян
Источник: Технологический институт CreditEase.