Создание объекта страницы для типов страниц с динамическим содержимым

Я хочу написать объект страницы для страницы с динамическим разделом, который переключается при нажатии кнопки. Поскольку вид не одинаков, логически есть три секции, из которых одновременно можно увидеть только одну.

<Div id=view1/> or
<Div id=view2/> or
<Div id=view3/>


MyPage < SitePrism::Page 
    [Other elements and sections]
    [Dynamic section or element]
End

Я думал о программировании объекта страницы несколькими способами.

1) Создайте 3 объекта страницы для каждого представления, которое он может обрабатывать. Это не масштабируется, потому что количество просмотров может увеличиться. Также количество таких динамических разделов может увеличивать общее количество различных объектов страницы в геометрической прогрессии. То есть:

MyPage1 с разделом, указывающим на view1. Аналогично для просмотра 2 и 3.

2) иметь все возможные разделы в одном объекте. Это прекрасно работает, но объект страницы не выглядит интуитивно понятным.

MyPage < SitePrism::Page
    Section :view1, Section::View1, "#view1"
    Section :view2, Section::View2, "#view2"
    Section :view3, Section::View3, "#view3" 
End

3) определите метод, который заботится о создании раздела во время выполнения. Таким образом, моя страница не имеет раздела во время загрузки, но после загрузки страницы я вызываю соответствующий метод, который загружает раздел на странице. (это не реализовано, но я думаю, что это может сработать, хотя для этого потребуется столько методов в объекте страницы, сколько таких динамических разделов)

Образец:

MyPage < SitePrism::Page
    Def self.createView(type)
        If type == view1
            Section :view1, Section::View1, "#view1"
        Elsif type == view2
            (Like above for view 2)
        Else
            (Like above for view 3)
        End
    End
End

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


person Pushkar Pahare    schedule 13.04.2015    source источник
comment
Похоже, у вас на странице есть аккордеон, который показывает различную информацию в зависимости от нажатия кнопки (и пользователи могут переключаться между ними). Тогда лучший выбор (на мой взгляд) - № 2, иметь раздел для каждого раздела. Вы также можете добавить вспомогательные методы для запуска и проверки того, что правильный раздел открыт. Надеемся, что другие инженеры знают о дизайне страницы, но вы всегда можете использовать название или комментарии для уточнения: Раздел:ДоставкаАккордеон, Раздел:ЦеныАккордеон и т. д.   -  person tgf    schedule 24.04.2015
comment
Спасибо tmg за комментарий! Моя страница делает вызов ajax для изменения макета определенного div. Единственная проблема, которую я вижу при таком подходе, заключается в том, что если на странице есть несколько таких представлений. В этом случае PageObject будет загроможден ненужной информацией. Меняется в данном конкретном случае только макет, а не информация.   -  person Pushkar Pahare    schedule 27.04.2015
comment
Извините, что не ответил на это. Мне пришло в голову, что вы также можете сделать что-то вроде этого: stackoverflow.com/questions/32207659/ и динамически добавить раздел в объект страницы, когда вам это нужно. Я думаю, для вашего случая, хотя я бы все же выбрал № 2   -  person tgf    schedule 29.08.2015