package org.lightadmin.component; import org.lightadmin.SeleniumContext; import org.lightadmin.util.WebElementTransformer; import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.TimeoutException; import org.openqa.selenium.WebElement; import static org.junit.Assert.fail; public class QuickViewComponent extends DynamicComponent<QuickViewComponent> { private final WebElement dataTableElement; private final int itemId; public QuickViewComponent( int itemId, WebElement dataTableElement, SeleniumContext seleniumContext ) { super( seleniumContext ); this.itemId = itemId; this.dataTableElement = dataTableElement; } public String[] getQuickViewFieldNames() { return WebElementTransformer.transformToArray( getQuickViewContainer().findElements( By.className( "qv-field-name" ) ) ); } public String[] getQuickViewFieldValues() { return WebElementTransformer.transformToArray( getQuickViewContainer().findElements( By.className( "qv-field-value" ) ) ); } public QuickViewComponent hide() { getHideButton().click(); return this; } @Override protected void isLoaded() throws Error { try { webDriver().waitForElementVisible( getQuickViewContainer() ); } catch ( NoSuchElementException e ) { fail( "Quick View Component for is not visible" ); } try { webDriver().waitForElementVisible( getHideButton() ); } catch ( NoSuchElementException e ) { fail( "Hide button is not visible" ); } } @Override protected void load() { getShowButton().click(); } private WebElement getShowButton() { return dataTableElement.findElement( By.xpath( ".//img[@title='Click for Quick View']" ) ); } private WebElement getHideButton() { return dataTableElement.findElement( By.xpath( ".//img[@title='Click to close Quick View']" ) ); } private WebElement getQuickViewContainer() { return webDriver().findElement( By.id( "quickView-" + itemId ) ); } public boolean isHidden() { try { webDriver().waitForElementInvisible( getQuickViewContainer() ); webDriver().waitForElementVisible( getShowButton() ); } catch ( TimeoutException e ) { return false; } catch ( NoSuchElementException e ) { return false; } return true; } public WebElement getField( String fieldName ) { return webDriver().findElement( By.xpath( "//div[@id='quickView-" + itemId + "']//tr[td[strong[contains(text(),'" + fieldName + "')]]]/td[@class='qv-field-value']" ) ); } }