Инкапсуляция логики в страницах с использованием GEB и Cucumber - PullRequest
3 голосов
/ 13 мая 2011

Используя GEB, я использовал шаблон объекта страницы для статической инкапсуляции информации о различных страницах.

Затем я реорганизовал свой код GEB для использования из отдельного класса, чтобы я мог инкапсулировать общие команды, используя вызовы методов.

Например, у меня будет метод login (), который вызовет соответствующий код GEB для входа на сайт, который я тестирую. Затем я бы использовал другие общие функции, использующие вызовы методов для класса TestHelper.

Я хотел перенести эти общие функции на страницы, на которые они действуют. Например, страница поиска будет иметь метод поиска, страница входа будет иметь метод входа. Таким образом, я могу создать библиотеку страниц, в которой есть все общие функции для использования в нескольких проектах GEB. Теперь, чтобы сделать это, каждая страница должна иметь дескриптор на geb.Browser, поэтому мне теперь нужно было бы создать экземпляр каждой страницы в тестовой настройке. При этом я больше не могу использовать стандартный шаблон объекта страницы.

to ReviewQueuePage
assert at(ReviewQueuePage)

Приведенный выше код выдаст нулевой указатель, так как объект больше не может быть доступен статическим образом, что означает, что мне пришлось изменить код на

go ReviewQueuePage.url

Это удаляет все функциональные возможности использования класса в качестве страницы.

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

Ответы [ 2 ]

5 голосов
/ 13 мая 2011

Этот ресурс может быть вам интересен. http://adhockery.blogspot.com/2010/11/encapsulating-page-state-and-actions-in.html. Также есть примеры в git .

Это также может быть полезно Передача состояния между страницами при использовании geb & spock

1 голос
/ 13 мая 2011

Я немного растерялся. Вы ищете способ поделиться общим кодом между несколькими страницами? Такое впечатление у меня возникает после прочтения вашего вопроса несколько раз, но я не совсем уверен. Вы упомянули «общие функции». Ну, общие компоненты могут быть инкапсулированы с использованием объектов модуля. На каждой странице, которая использует общий компонент, просто ссылайтесь на объект модуля в объекте страницы.

...