Как использовать WebDriver / Selenium 2 LoadComponents в шаблоне PageObjects? - PullRequest
5 голосов
/ 06 июня 2011

Мне трудно привыкнуть к шаблону PageObject WebDriver. Пожалуйста, поделитесь своим опытом и способами использования шаблона PageObjects и loadableComponents.

Поскольку PageObject обычно представляет собой компонент или часть функциональности, сначала мне пришло в голову, что я должен использовать его для выполнения каких-то действий в load () и посмотреть, выполняет ли он то же, что и в isLoaded ().

Тогда я понял, что его следует использовать только для «загрузки» объектов (возможно, для инициализации), как в случае перемещения по сайту, каждый объект имеет свой собственный URL. И использование isLoaded () для проверки того, готов ли объект для тестирования.

Но если у вас есть сложный отправитель заказов JavaScript для тестирования, который является составной частью загрузчика файлов JS, формы JS, основанной на 2 независимых частях и есть три вида заказов, вы никуда не перемещаетесь (относительно URL) Просто состояние элементов меняется.

Рассмотрим метод get (). Вы попадаете на страницу с интерактивной формой. Загружается, когда форма существует на странице. Тогда у вас есть объекты form1 и form2 ... как должны выглядеть их методы load () и isLoaded (), они сразу готовы к действию, потому что им не нужна загрузка, просто тестируют свои сервисы.

Это беспорядок, никто не знает, используется ли метод isLoaded () для проверки, загружен ли объект, загружен ли объект и был ли он правильно настроен. Но я думаю, что первый способ верен, и что правильность его настройки должна быть обеспечена в ходе тестов.

Сценарий:

Testing first part of html form - test that field client side validation works
Testing the second one that depends on the first one
Testing the following file uploader - upload, canceling, clearing, order, fileIDs
Testing the overall html form submission - ServerSide validation errors, results

В документации сказано:

  • LoadableComponent
  • PageObjects

    1. Публичные методы представляют сервисы, которые предлагает страница

      Проверка, загрузка, загрузка нескольких, отмена, очистка

    2. Старайтесь не подвергать внутренности страницы

      Единственное, что приходит мне в голову, - это скрыть экземпляр экземпляра Driver для UnitTests и использовать только PageObjects для хранения всех имен полей, имен классов css в PageObjects + предоставления PageObjects входных данных и утверждения логического результата служб / функциональных возможностей

    3. Методы, возвращающие другие объекты PageObjects

      К этому сложнее всего привыкнуть. Наличие 4-х страничных объектов для одной интерактивной формы вроде не кажется естественным. Они рекомендуют Form1, Form2 (Form1), Upload (Form2), Submit (Upload), хотя я нахожу цепочку и передачу ссылки на предыдущий объект очень хаотичной. Вызов get () для всех из них в тестовом методе выглядит лучше. Но я предполагаю, что идея заключается не в том, чтобы выставить экземпляр Driver для тестов, а в том, чтобы использовать только PageObjects, которые используют экземпляр Driver внутри

    4. Различные результаты для одного и того же действия моделируются как разные методы Я полагаю, это означает, что не следует принимать решение о достоверности этого действия на стороне объекта Page, а на стороне теста

Ответы [ 2 ]

0 голосов
/ 17 июня 2014

Загружаемый компонент является расширением шаблона объекта Page. Класс LoadableComponent в библиотеке WebDriver поможет разработчикам тестовых случаев убедиться, что страница или компонент страницы загружен успешно. Это значительно уменьшает усилия по отладке ваших тестовых случаев. Объект страницы должен расширять этот абстрактный класс Loadable Component, и в результате он должен обеспечить реализацию для следующих двух методов:

защищенная абстрактная пустая нагрузка ()

защищенная абстрактная пустота isLoaded () throws java.lang.Error

Страница или компонент, который должен быть загружен в методах load () и isLoaded (), определяет, будет ли страница полностью загружена. Если он загружен не полностью, выдается ошибка.

https://code.google.com/p/selenium/wiki/LoadableComponent

0 голосов
/ 29 июня 2011

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

Компоненты на странице являются свойствами страницы , содержащей их, и я устанавливаю двустороннюю связь междукомпонент и страница.Они не являются полностью функциональными объектами страницы.Может быть, ваши формы могут быть смоделированы таким же образом.

...