Я столкнулся с ситуацией, когда стандартный дизайн объекта страницы является одномерным. Эти страницы очень большие и содержат много (в основном уникальных) разделов страниц.Одномерная структура объекта страницы
Существующего свод объектов страницы выглядит следующим образом:
this.pageHeaderLogin = $$('div.header > a.login');
this.pageHeaderSignUp = $$('div.header > a.signup');
this.pageHeaderContact = $$('div.header > a.contact');
this.pageIntroSectionTitle = $$('div.intro > span.title');
this.pageIntroSectionText = $$('div.intro > span.description');
и так далее, с целыми 50-100 элементов, все непосредственными детьми this
.
Мне кажется, что гораздо лучшая структура не будет одномерной, а скорее разделенной на части, подобной структуре страницы. Поэтому я бы предпочел сделать такой объект страницы, как:
this.pageHeader.login = $$('div.header > a.login');
this.pageHeader.signUp = $$('div.header > a.signup');
...
this.pageIntroSection.title = $$('div.intro > span.title');
и так далее.
К сожалению, мне сказали, что это слишком сложно. Я хотел бы аргументировать, что он не только не сложный, но и более организованный, но все примеры для объектов страницы слишком малы, чтобы проиллюстрировать что-либо за пределами одномерной структуры.
Может ли кто-нибудь указать мне на хорошие примеры не одномерного объекта страницы, который я могу использовать в качестве ссылки, чтобы показать преимущества этого дизайна?
Я думаю, что пользовательская функция require() будет более сложной для понимания, чем эта модель. Некоторые примеры объектов страницы относятся к «объектам компонентов» в качестве опции. Мне приходит в голову, что я могу так же легко сделать домашнюю страницуHeaderPageObject и домашнюю страницуIntroPageObject и домашнюю страницуFeaturesPageObject и так далее. Но тогда это намного больше требует() s и намного больше жонглирования объектов. Вместо home.intro.text и home.header.login, я должен иметь homeintro.text и homeheader.login. Можете ли вы объяснить, почему квартира предпочтительнее? –
@KeithTyler У меня такое чувство, что либо вы неправильно поняли мою точку зрения, либо я недостаточно объяснил это, извините, если это так. Я на самом деле поддерживаю идею, чтобы в определенной степени вместить сложные объекты страницы. С представленным подходом вы можете фактически использовать поля из вложенных объектов страницы без дополнительных требований в своем тесте, например. см. 'page.subPage.someotherfield' в тесте образца. 'requirePO' - это просто вспомогательный инструмент, который требует, чтобы в тестах были более читабельны и один способ импортировать объекты страниц из указанного места в вашем проекте. Благодаря! – alecxe