package com.framework.site.objects.footer;
import com.framework.asserts.JAssertion;
import com.framework.driver.event.HtmlElement;
import com.framework.driver.extensions.jquery.By;
import com.framework.driver.objects.AbstractWebObject;
import com.framework.driver.objects.Link;
import com.framework.site.objects.footer.enums.FooterItem;
import com.framework.utils.matchers.JMatchers;
import com.google.common.base.Optional;
import com.google.common.collect.Maps;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Map;
/**
* Created with IntelliJ IDEA ( LivePerson : www.liveperson.com )
*
* Package: com.framework.site.objects.footer
*
* Name : SubFooterObject
*
* User : solmarkn / Dani Vainstein
*
* Date : 2015-01-06
*
* Time : 16:55
*/
public class SubFooterObject extends AbstractWebObject
{
//region SubFooterObject - Variables Declaration and Initialization Section.
private static final Logger logger = LoggerFactory.getLogger( SubFooterObject.class );
static final org.openqa.selenium.By ROOT_BY = By.className( "sub-footer" );
private static final String LOGICAL_NAME = "Sub-Footer";
// ------------------------------------------------------------------------|
// --- WEB-OBJECTS CACHING ------------------------------------------------|
// ------------------------------------------------------------------------|
private HtmlElement ul_minor, ul_social;
//endregion
//region SubFooterObject - Constructor Methods Section
SubFooterObject( final HtmlElement rootElement )
{
super( rootElement, LOGICAL_NAME );
initWebObject();
}
//endregion
//region SubFooterObject - 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 = getDriver().elementExists( LinkListObject.ROOT_BY );
assertion.assertThat( String.format( REASON, "ul.minor" ), e.isPresent(), JMatchers.is( true ) );
ul_minor = e.get();
e = getDriver().elementExists( SubFooterObject.ROOT_BY );
assertion.assertThat( String.format( REASON, "ul.social" ), e.isPresent(), JMatchers.is( true ) );
ul_social = e.get();
}
//endregion
//region SubFooterObject - Service Methods Section
private HtmlElement getRoot()
{
return getBaseRootElement( SubFooterObject.ROOT_BY );
}
//endregion
//region SubFooterObject - Footer.SubFooter Implementation Methods Section
public boolean isDisplayed()
{
boolean isDisplayed = getRoot().isDisplayed();
logger.info( "Determine if sub footer is currently displayed < {} >", isDisplayed );
return isDisplayed;
}
public boolean itemExists( final FooterItem item )
{
logger.info( "Determine if item < {} > exists", item );
switch ( item )
{
case ABOUT_CARNIVAL:
return getRoot().childExists( By.linkText( "About Carnival" ) ).isPresent();
case LEGAL_NOTICES:
return getRoot().childExists( By.linkText( "Legal Notices" ) ).isPresent();
case PRIVACY_POLICY:
return getRoot().childExists( By.linkText( "Privacy Policy" ) ).isPresent();
case CAREERS:
return getRoot().childExists( By.linkText( "Careers" ) ).isPresent();
case TRAVEL_PARTNERS:
return getRoot().childExists( By.linkText( "Travel Partners" ) ).isPresent();
case SITE_MAP:
return getRoot().childExists( By.linkText( "Site Map" ) ).isPresent();
}
return false;
}
public Link getFooterLinkItem( final FooterItem item )
{
switch ( item )
{
case FACEBOOK:
case INSTAGRAM:
case PINTEREST:
case TWITTER:
case FUNVILLE:
{
return new Link( findSocial( item ) );
}
default:
{
return new Link( findLeftItem( item ) );
}
}
}
public HtmlElement getTradeMark()
{
logger.info( "Returning Trademark element" );
return getDriver().findElement( By.cssSelector( ".social.pull-right h4" ) );
}
public String getFacebookLikeRef()
{
try
{
HtmlElement form = findLikeForm();
String href = form.getAttribute( "ajaxify" );
logger.info( "Returning facebook link href < {} >", href );
return href;
}
finally
{
getDriver().switchTo().defaultContent();
}
}
public Map<String,String> getInfo()
{
logger.info( "Returning a map of sub-footer links ..." );
Map<String,String> links = Maps.newHashMap();
List<HtmlElement> anchors = findMinorAnchors();
for( HtmlElement he : anchors )
{
links.put( he.getText(), he.getAttribute( "href" ) );
}
return links;
}
//endregion
//region SubFooterObject - Element Finder Methods Section
private HtmlElement findLikeForm()
{
final org.openqa.selenium.By findBy = By.id( "u_0_0" );
getDriver().switchTo().frame( "lazy_like" );
return getDriver().findElement( findBy );
}
private HtmlElement findSocial( FooterItem item )
{
String jquery = String.format( ".social img[alt='%s']", item.getPropertyName() );
return getDriver().findElement( By.jQuerySelector( jquery ).parent() );
}
private HtmlElement findLeftItem( FooterItem item )
{
return ul_minor.findElement( By.linkText( item.getPropertyName() ) );
}
private List<HtmlElement> findMinorAnchors()
{
return getDriver().findElements( By.cssSelector( "ul.minor.pull-left a" ) );
}
//endregion
}