package com.framework.site.objects.body; import com.framework.asserts.JAssertion; import com.framework.driver.event.HtmlElement; import com.framework.driver.event.HtmlObject; import com.framework.driver.objects.AbstractWebObject; import com.framework.utils.string.ToLogStringStyle; import com.google.common.base.Joiner; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import org.apache.commons.lang3.builder.ToStringBuilder; import org.openqa.selenium.By; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; import static com.framework.utils.datetime.TimeConstants.FIVE_SECONDS; import static org.hamcrest.Matchers.is; /** * Created with IntelliJ IDEA ( LivePerson : www.liveperson.com ) * * Package: com.framework.site.objects.body * * Name : LinkToutObject * * User : solmarkn / Dani Vainstein * * Date : 2015-01-06 * * Time : 19:55 */ public class LinkToutsContainerObject extends AbstractWebObject { //region LinkToutsContainerObject - Variables Declaration and Initialization Section. private static final Logger logger = LoggerFactory.getLogger( LinkToutsContainerObject.class ); static final String LOGICAL_NAME = "Link Touts Container"; public static final By ROOT_BY = By.className( "link-tout" ); //endregion //region LinkToutsContainerObject - Constructor Methods Section public LinkToutsContainerObject( final HtmlElement rootElement ) { super( rootElement, LOGICAL_NAME ); initWebObject(); } //endregion //region LinkToutsContainerObject - 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 all element \"%s\" exits"; JAssertion assertion = getRoot().createAssertion(); Optional<List<HtmlElement>> es = getRoot().allChildrenExists( By.tagName( "li" ), FIVE_SECONDS ); assertion.assertThat( String.format( REASON, "li" ), es.isPresent(), is( true ) ); } //endregion //region LinkToutsContainerObject - Service Methods Section private HtmlElement getRoot() { return getBaseRootElement( ROOT_BY ); } //endregion //region LinkToutsContainerObject - Business Methods Section //endregion //region LinkToutsContainerObject - Element Finder Methods Section private HtmlElement getLinkToutAnchor() { return getRoot().findElement( By.tagName( "a" ) ); } private HtmlElement getLinkToutImg() { return getRoot().findElement( By.tagName( "img" ) ); } private HtmlElement getH4Span() { return getRoot().findElement( By.cssSelector( "span.h4" ) ); } private HtmlElement getParaSpan() { return getRoot().findElement( By.cssSelector( "span.para" ) ); } private HtmlElement getLinkSpan() { return getRoot().findElement( By.cssSelector( "span.link" ) ); } //endregion public class LinkTout { private final int index; private String toutTitle; private HtmlElement rootElement; //region LinkTout - Constructor Methods Section public LinkTout( final HtmlElement rootElement, int index ) { this.index = index; this.rootElement = Preconditions.checkNotNull( rootElement, "WebElement rootElement cannot be null" ); this.toutTitle = Joiner.on( " " ).join( HtmlObject.extractText( findSpanH4Spans() ) ); } //endregion // //region LinkToutsContainerObject - Initialization and Validation Methods Section // // protected void initWebObject() // { // logger.debug( "validating static elements for web object id: <{}>, name:<{}>...", // getQualifier(), getLogicalName() ); // // JAssertion assertion = new JAssertion( getDriver() ); // ExpectedCondition<WebElement> condition1 = WaitUtil.presenceBy( By.tagName( "img" ) ); // ExpectedCondition<WebElement> condition2 = WaitUtil.presenceBy( By.cssSelector( "span.h4" ) ); // ExpectedCondition<WebElement> condition3 = WaitUtil.presenceBy( By.cssSelector( "span.para" ) ); // // assertion.assertWaitThat( // "Validate \"img\" element is present", TimeConstants.TWO_SECONDS, condition1 ); // assertion.assertWaitThat( // "Validate \"span.h4\" element is present", TimeConstants.TWO_SECONDS, condition2 ); // assertion.assertWaitThat( // "Validate \"span.para\" element is present", TimeConstants.TWO_SECONDS, condition3 ); // } // // //endregion private HtmlElement getRoot() { return getBaseRootElement( ROOT_BY ); } public String getReference() { return null; } public String getImageAlt() { return null; } public String getLeftTitle() { return null; } public String getRightTitle() { return null; } public String getParagraphText() { return null; } public String activateTout() { return null; } @Override public String toString() { return new ToStringBuilder( this, ToLogStringStyle.LOG_LINE_STYLE ) .append( "toutTitle", toutTitle != null ? toutTitle : "N/A" ) .append( "index", index ) .toString(); } //endregion //region LinkToutsContainerObject - Element Finder Methods Section private HtmlElement findSpanH4() { return rootElement.findElement( By.cssSelector( "span.h4" ) ); } private List<HtmlElement> findSpanH4Spans() { return rootElement.findElements( By.cssSelector( "span.h4 > span" ) ); } //endregion } }