package com.framework.site.objects.header; import com.framework.asserts.JAssertion; import com.framework.driver.event.HtmlElement; import com.framework.driver.objects.AbstractWebObject; import com.framework.site.config.SiteSessionManager; import com.framework.site.objects.header.interfaces.Header; import com.framework.site.pages.BaseCarnivalPage; import com.framework.utils.matchers.JMatchers; import com.google.common.base.Optional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Locale; import static com.framework.utils.datetime.TimeConstants.*; /** * Created with IntelliJ IDEA ( LivePerson : www.liveperson.com ) * * Package: com.framework.site.objects.header * * Name : HeaderObject * * User : solmarkn / Dani Vainstein * * Date : 2015-01-05 * * Time : 23:11 */ public class SectionHeaderObject extends AbstractWebObject implements Header { //region HeaderSectionObject - Variables Declaration and Initialization Section. private static final Logger logger = LoggerFactory.getLogger( SectionHeaderObject.class ); // ------------------------------------------------------------------------| // --- WEB-OBJECTS DEFINITIONS --------------------------------------------| // ------------------------------------------------------------------------| private NotificationBar notificationBar = null; private MessageBar messageBar = null; private HeaderLinks headerLinks = null; private HeaderSubscribe headerSubscribe = null; private HeaderBranding headerBranding = null; private NavigationAdditional navigationAdditional = null; private HtmlElement header_nav_additional, header_links, header_subscribe, header_branding, notif_bar, message_bar = null; //endregion //region HeaderSectionObject - Constructor Methods Section public SectionHeaderObject( final HtmlElement rootElement ) { super( rootElement, Header.LOGICAL_NAME ); initWebObject(); } //endregion //region HeaderSectionObject - Initialization and Validation Methods Section @Override protected void initWebObject() { logger.debug( "validating static elements for web object id: <{}>, name:<{}>...", getQualifier(), getLogicalName() ); final String REASON = "assert that element \"%s\" exits"; JAssertion assertion = getRoot().createAssertion(); Optional<HtmlElement> e = getRoot().childExists( MessageBar.ROOT_BY, FIVE_SECONDS ); assertion.assertThat( String.format( REASON, "div.message-bar" ), e.isPresent(), JMatchers.is( true ) ); this.message_bar = e.get(); e = getRoot().childExists( NotificationBar.ROOT_BY, TWO_SECONDS ); assertion.assertThat( String.format( REASON, "div.notif-bar" ), e.isPresent(), JMatchers.is( true ) ); this.notif_bar = e.get(); e = getRoot().childExists( HeaderBranding.ROOT_BY, TWO_SECONDS ); assertion.assertThat( String.format( REASON, "div.header-branding" ), e.isPresent(), JMatchers.is( true ) ); this.header_branding = e.get(); e = getRoot().childExists( HeaderSubscribe.ROOT_BY, ONE_SECOND ); assertion.assertThat( String.format( REASON, "div.header-subscribe" ), e.isPresent(), JMatchers.is( true ) ); this.header_subscribe = e.get(); e = getRoot().childExists( HeaderLinks.ROOT_BY, ONE_SECOND ); assertion.assertThat( String.format( REASON, "div.header-links" ), e.isPresent(), JMatchers.is( true ) ); this.header_links = e.get(); e = getRoot().childExists( NavigationAdditional.ROOT_BY, ONE_SECOND ); assertion.assertThat( String.format( REASON, "div.header-nav-additional" ), e.isPresent(), JMatchers.is( true ) ); this.header_nav_additional = e.get(); } //endregion //region HeaderSectionObject - Service Methods Section @Override public MessageBar messageBar() { if ( null == this.messageBar ) { this.messageBar = new MessageBarObject( findMessageBarDiv() ); } return messageBar; } @Override public NotificationBar notificationBar() { if ( null == this.notificationBar ) { this.notificationBar = new NotificationBarObject( findNotificationBarDiv() ); } return notificationBar; } @Override public HeaderBranding headerBranding() { Locale locale = SiteSessionManager.get().getCurrentLocale(); if ( null == this.headerBranding ) { if( locale.equals( BaseCarnivalPage.AU )) { return new CurrencySelectorObject( findHeaderBrandingDiv() ); } else { return new TopDestinationsObject( findHeaderBrandingDiv() ); } } return headerBranding; } @Override public HeaderSubscribe subscribe() { if ( null == this.headerSubscribe ) { this.headerSubscribe = new HeaderSubscribeObject( findHeaderSubscribeDiv() ); } return headerSubscribe; } @Override public HeaderLinks headerLinks() { if ( null == this.headerLinks ) { this.headerLinks = new HeaderLinksObject( findHeaderLinksDiv() ); } return headerLinks; } @Override public NavigationAdditional navigationAdditional() { if ( null == this.navigationAdditional ) { this.navigationAdditional = new NavigationAdditionalObject( findNavigationAdditionalDiv() ); } return navigationAdditional; } private HtmlElement getRoot() { return getBaseRootElement( SectionHeaderObject.ROOT_BY ); } //endregion //region HeaderSectionObject - Element Finder Methods Section private HtmlElement findMessageBarDiv() { if( null == message_bar ) { this.message_bar = getDriver().findElement( MessageBar.ROOT_BY ); } return this.message_bar; } private HtmlElement findNotificationBarDiv() { return getRoot().findElement( NotificationBar.ROOT_BY ); } private HtmlElement findHeaderBrandingDiv() { if( null == header_branding ) { this.header_branding = getDriver().findElement( HeaderBranding.ROOT_BY ); } return this.header_branding; } private HtmlElement findHeaderSubscribeDiv() { if( null == header_subscribe ) { this.header_subscribe = getDriver().findElement( HeaderSubscribe.ROOT_BY ); } return this.header_subscribe; } private HtmlElement findHeaderLinksDiv() { if( null == header_links ) { this.header_links = getDriver().findElement( HeaderLinks.ROOT_BY ); } return this.header_links; } private HtmlElement findNavigationAdditionalDiv() { if( null == header_nav_additional ) { this.header_nav_additional = getDriver().findElement( NavigationAdditional.ROOT_BY ); } return this.header_nav_additional; } private HtmlElement findCurrencySelectorLi() { return findHeaderBrandingDiv().findElement( HeaderBranding.CurrencySelector.ROOT_BY ); } private HtmlElement findTopDestinations() { return findHeaderBrandingDiv().findElement( HeaderBranding.TopDestinations.ROOT_BY ); } //endregion }