Перейти к содержимому

Фотография

Pattern page object - можно ли считать pop-up отдельной страницей?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 O'Leen

O'Leen

    Новый участник

  • Members
  • Pip
  • 55 сообщений
  • Город:Киев

Отправлено 28 февраля 2013 - 11:38

Пытаюсь переделать свои тесты на Selenium 2 согласно шаблону Page Object.
На странице можно вызвать несколько pop-up с множеством своих элементов, соответственно все их нужно протестировать.
В связи с этим вопрос: есть ли смысл считать все pop-up отдельными страницами?
Или лучше работать с ними в рамках одной страницы?
  • 0

#2 Boltick

Boltick

    Специалист

  • Members
  • PipPipPipPipPip
  • 596 сообщений
  • ФИО:Алексей
  • Город:планета Земля

Отправлено 04 марта 2013 - 09:36

Мне кажется, что если при вызове pop-up URL не меняется, то в принципе страница остается прежней, поэтому нет смысла заводить отдельный Page Object. Можете этот pop-up описать в отдельном классе и использовать потом как компонент страницы. Больше сказать сложно, т.к. мало информации.
  • 0
Алексей Булат
Про Тестинг

#3 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 04 марта 2013 - 13:30

Конечно лучше работать в рамках одной страницы, т.к. это удобнее. Не нужно усложнять проект :)
  • 0

#4 O'Leen

O'Leen

    Новый участник

  • Members
  • Pip
  • 55 сообщений
  • Город:Киев

Отправлено 04 марта 2013 - 14:10

Можете этот pop-up описать в отдельном классе и использовать потом как компонент страницы.


Собственно это и имела ввиду, есть ли смысл его описывать как отдельный класс? Пока описываю как один класс, но элементов там получается около сотни, больше десятка методов (пока описаны не все), это не многовато для одного класса?
  • 0

#5 owasp

owasp

    Активный участник

  • Members
  • PipPip
  • 87 сообщений

Отправлено 04 марта 2013 - 16:03

Если вы пишете тесты в стиле StronglyTypedPageObject, а именно, как-то так:
using MvcMusicStore.FunctionalTests.Step3.Pages;
using NUnit.Framework;
using FluentAssertions;

namespace MvcMusicStore.FunctionalTests.Step3
{
    public class StronglyTypedPageObjectWithComponent
    {
        [Test]
        public void Can_buy_an_Album_when_registered()
        {
            var orderedPage = new HomePage()
                .Menu
                .GoToAdminForAnonymousUser()
                .GoToRegisterPage()
                .CreateValidUser(ObjectMother.CreateRegisterModel())
                .GenreMenu
                .SelectGenreByName("Disco")
                .SelectAlbumByName("Le Freak")
                .AddAlbumToCart()
                .Checkout()
                .SubmitShippingInfo(ObjectMother.CreateShippingInfo(), "Free");

            orderedPage.Title.Should().Be("Checkout Complete");
        }
    }
}
Тогда есть явный смысл реализовать получение каждого объекта как PageObject.

Но более удачное решение - использовать PageComponent или HtmlElement в дополнение к PageObject. Паттерн PageComponent нестандартный, используется в TestStack.Seleno (.NET), см. http://teststack.github.com/. Аналогичный функционал для Java есть в разработке HtmlElement от Яндекс, см. https://github.com/y...s/htmlelements.

Оба подхода похожи, только языки разные. Описание преимуществ HtmlElement по сравнению с чистым PageObject есть в статье http://habrahabr.ru/...ex/blog/158787/ (Тестирование в Яндексе. Фреймворк HTML Elements: чего не хватает в Page Object, и как это исправить). В TestStack.Seleno нет поиска по относительным локаторам, как это сделано в HtmlElement, этот функционал дописал сам. А потом ещё его расширил возможностью поиска только видимых элементов по относительным локаторам.

В своей разработке не использую StronglyTypedPageObject, обхожусь возможностями простого подхода PageObject. Так как сценарий тестов формируется для TestStack.BDDfy, а там сценарий разделён на вызовы. И строится не цепочечно (как показано в примере кода выше). А более традиционно, похоже на:
using FluentAssertions;
using MvcMusicStore.FunctionalTests.Step2.Pages;
using NUnit.Framework;
using TestStack.Seleno.PageObjects;

namespace MvcMusicStore.FunctionalTests.Step2
{
    public class PageObjectWithComponents
    {
        [Test]
        public void Can_buy_an_Album_when_registered()
        {
            var orderedPage = PlaceOrder(homepage);
            orderedPage.Title.Should().Be("Checkout Complete");
        }

        private static Page PlaceOrder(HomePage homepage)
        {
            var shippingPage = homepage
                .GenreMenu
                .SelectGenreByName("Disco")
                .SelectAlbumByName("Le Freak")
                .AddAlbumToCart()
                .Checkout();

            shippingPage.FirstName = "Homer";
            shippingPage.LastName = "Simpson";
            shippingPage.PromoCode = "FREE";
            return shippingPage.SubmitOrder();
        }
    }
}

Отталкиваясь от TestStack.Seleno расширил и написал функционал для работы с компонентами (использую TestStack.Seleno не в чистом виде). (Страницы и компоненты) состоят из (компонент, IWebElement и SelectElement). Удобно.
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных