package com.framework.site.pages; import com.framework.asserts.JAssertion; import com.framework.driver.event.*; import com.framework.driver.objects.AbstractPageObject; import com.framework.site.config.SiteSessionManager; import com.framework.site.objects.body.common.SectionBreadcrumbsBarObject; import com.framework.site.objects.footer.SectionFooterObject; import com.framework.site.objects.header.SectionHeaderObject; import com.framework.site.objects.header.interfaces.Header; import com.framework.utils.matchers.JMatchers; import com.google.common.base.MoreObjects; import com.google.common.base.Optional; import com.google.common.collect.Sets; import org.openqa.selenium.By; import org.openqa.selenium.Cookie; import org.openqa.selenium.NoSuchElementException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Locale; import java.util.Map; import java.util.Set; /** * Created with IntelliJ IDEA ( LivePerson : www.liveperson.com ) * * Package: com.framework.site.pages * * Name : CarnivalPage * * User : solmarkn / Dani Vainstein * * Date : 2015-01-06 * * Time : 20:28 */ public abstract class BaseCarnivalPage extends AbstractPageObject { //region BaseCarnivalPage - Variables Declaration and Initialization Section. private static final Logger logger = LoggerFactory.getLogger( BaseCarnivalPage.class ); public static final Locale AU = new Locale( "en", "AU" ); protected static final String USER_LAST_NAME_COOKIE = "UserLastName"; public static final String USER_FIRST_NAME_COOKIE = "UserFirstName"; public static final String VACATION_WITH_KIDS_COOKIE = "ccl_learn_experience"; protected static final String USER_EMAIL_ADDRESS_COOKIE = "UserEmailAddress"; private String pageId, pageName, site_region, referrer; private final String hst; private Locale currentLocale = SiteSessionManager.get().getCurrentLocale(); // ------------------------------------------------------------------------| // --- WEB-OBJECTS DEFINITIONS --------------------------------------------| // ------------------------------------------------------------------------| private Header header = null; private SectionFooterObject footer = null; //endregion //region BaseCarnivalPage - Constructor Methods Section protected BaseCarnivalPage( final String logicalName ) { super( SiteSessionManager.get().getDriver(), logicalName ); this.hst = getHstValue(); SiteSessionManager.get().setHstValue( hst ); logger.info( "Current environment code is < '{}' >", hst ); if( parseUtagData() ) { Locale expected = SiteSessionManager.get().getCurrentLocale(); new JAssertion( getDriver() ) .assertThat( "Asserting locale from configuration and actual", parseRegion(), JMatchers.is( expected ) ); } } //endregion //region BaseCarnivalPage - UTAG getters Section protected Optional<String> u_tag_data_page_id() { return Optional.fromNullable( pageId ); } protected Optional<String> u_tag_data_page_name() { return Optional.fromNullable( pageName ); } protected Optional<String> u_tag_data_site_region() { return Optional.fromNullable( site_region ); } protected Optional<String> u_tag_data_referrer() { return Optional.fromNullable( referrer ); } //endregion //region BaseCarnivalPage - Service Methods Section protected Locale getCurrentLocale() { return currentLocale; } /** * @return the {@link Header} instance implemented by {@link com.framework.site.objects.header.SectionHeaderObject} */ public Header header() { if ( null == this.header ) { this.header = new SectionHeaderObject( getDriver().findElement( Header.ROOT_BY ) ); } return header; } public SectionFooterObject footer() { if ( null == this.footer ) { this.footer = new SectionFooterObject( getDriver().findElement( SectionFooterObject.ROOT_BY ) ); } return footer; } @Override public String toString() { return MoreObjects.toStringHelper( this ) .addValue( super.toString() ) .add( "hst", hst ) .add( "utag_data.site_region", u_tag_data_site_region() == null ? "N/A" : site_region ) .add( "utag_data.pageId", u_tag_data_page_id() == null ? "N/A" : pageId ) .add( "utag_data.pageName", u_tag_data_page_name() == null ? "N/A" : pageName ) .add( "utag_data.referrer", referrer ) .omitNullValues() .toString(); } public String getHstValue() { Optional<HtmlElement> optional = findHstInput(); if( optional.isPresent() ) { return optional.get().getAttribute( "value" ); } return "N/A"; } public Set<Cookie> waitForUserCookies() { Set<Cookie> cookies = Sets.newHashSet(); HtmlCondition<Cookie> uln = ExpectedConditions.cookieIsPresent( USER_LAST_NAME_COOKIE ); HtmlCondition<Cookie> ufn = ExpectedConditions.cookieIsPresent( USER_FIRST_NAME_COOKIE ); HtmlCondition<Cookie> uea = ExpectedConditions.cookieIsPresent( USER_EMAIL_ADDRESS_COOKIE ); cookies.add( HtmlDriverWait.wait10( getDriver() ).until( uln ) ); cookies.add( HtmlDriverWait.wait10( getDriver() ).until( ufn ) ); cookies.add( HtmlDriverWait.wait10( getDriver() ).until( uea ) ); return cookies; } public boolean isUserLoggedIn() { return getDriver().manage().getCookieNamed( USER_LAST_NAME_COOKIE ) != null; } public String getSecuredUrl() { return findHiddenSecuredUrlInput().getAttribute( "value" ); } //endregion //region BaseCarnivalPage - Element Finder Methods Section protected HtmlElement findBreadcrumbBarDiv() { return getDriver().findElement( SectionBreadcrumbsBarObject.ROOT_BY ); } private Optional<HtmlElement> findHstInput() { try { HtmlElement he = getDriver().findElement( By.id( "hst" ) ); return Optional.of( he ); } catch ( NoSuchElementException e ) { return Optional.absent(); } } //endregion //region BaseCarnivalPage - Private Functions Section private boolean parseUtagData() { final String SCRIPT = "if( typeof utag_data == 'undefined' ) return false; return true;"; HtmlDriver.JavaScriptSupport js = getDriver().javascript(); logger.debug( "determine if utag_data is defined on page ..." ); Optional<Boolean> utag = js.getBoolean( SCRIPT ); if( utag.isPresent() && utag.get() ) { final String UTAG_SCRIPT = "var utag = {};\n" + " utag[\"site_region\"] = utag_data[\"site_region\"];\n" + " utag[\"page_id\"] = utag_data[\"page_id\"];\n" + " utag[\"page_name\"] = utag_data[\"page_name\"];\n" + " utag[\"dom.referrer\"] = utag_data[\"dom.referrer\"];\n" + " return utag;"; Map<String,String> map = js.getMap( UTAG_SCRIPT ); logger.debug( "reading utag_data values using javascript ..." ); this.site_region = map.get( "site_region" ); this.pageId = map.get( "page_id" ); this.pageName = map.get( "page_name" ); this.referrer = map.get( "dom.referrer" ); return true; } return false; } private Locale parseRegion() { if( site_region.equals( "US" ) ) return Locale.US; if( site_region.equals( "UK" ) ) return Locale.UK; if( site_region.equals( "AU" ) ) return AU; return null; } private HtmlElement findHiddenSecuredUrlInput() { By findBy = By.id( "hSecUrl" ); return getDriver().findElement( findBy ); } //endregion }