package com.redheap.selenium.component; import org.openqa.selenium.WebDriver; public class AdfCarousel extends AdfComponent { // see http://jdevadf.oracle.com/adf-richclient-demo/docs/js-subids.html private static final String SUBID_itemText = "itemText"; // af:inputText private static final String SUBID_spinNext = "spinNext"; // <a> element private static final String SUBID_spinPrevious = "spinPrevious"; // <a> element private static final String JS_FIND_RELATIVE_COMPONENT_CLIENTID_ITEMKEY = JS_FIND_COMPONENT + "return comp.findComponent(arguments[1],arguments[2]).getClientId()"; private static final String JS_FIND_RELATIVE_COMPONENT_CLIENTID_CURRENT_ITEM = JS_FIND_COMPONENT + "return comp.findComponent(arguments[1],comp.getCurrentItemKey()).getClientId()"; private static final String JS_GET_CURRENT_ITEM_KEY = JS_FIND_COMPONENT + "return comp.getCurrentItemKey()"; private static final String JS_SET_CURRENT_ITEM_KEY = JS_FIND_COMPONENT + "return comp.setCurrentItemKey(arguments[1])"; private static final String JS_GET_ITEM_COUNT = JS_FIND_COMPONENT + "return comp.getRows()"; private static final String JS_GET_ROW_COUNT = JS_FIND_PEER + "return peer._knownRowCount"; public AdfCarousel(WebDriver webDriver, String clientid) { super(webDriver, clientid); } public <T extends AdfComponent> T findAdfComponent(String relativeClientId, String itemKey) { String clientid = (String) executeScript(JS_FIND_RELATIVE_COMPONENT_CLIENTID_ITEMKEY, getClientId(), relativeClientId, itemKey); return AdfComponent.forClientId(getDriver(), clientid); } @Override public <T extends AdfComponent> T findAdfComponent(String relativeClientId) { String clientid = (String) executeScript(JS_FIND_RELATIVE_COMPONENT_CLIENTID_CURRENT_ITEM, getClientId(), relativeClientId); return AdfComponent.forClientId(getDriver(), clientid); } public String getItemText() { return findSubIdElement(SUBID_itemText).getText(); } public void clickPrevious() { findSubIdElement(SUBID_spinPrevious).click(); waitForPpr(); } public void clickNext() { findSubIdElement(SUBID_spinNext).click(); waitForPpr(); } public String getCurrentItemKey() { // warning: this is not the row-index (server side) but client side key // eg. when showing items 100-124 on screen the keys are still "0" to "24" return (String) executeScript(JS_GET_CURRENT_ITEM_KEY, getClientId()); } public String setCurrentItemKey(String key) { String oldKey = (String) executeScript(JS_SET_CURRENT_ITEM_KEY, getClientId(), key); return oldKey; } public int getItemDisplayCount() { return ((Number) executeScript(JS_GET_ITEM_COUNT, getClientId())).intValue(); } public int getRowCount() { return ((Number) executeScript(JS_GET_ROW_COUNT, getClientId())).intValue(); } }