package com.redheap.selenium.component; import com.redheap.selenium.component.uix.UixValue; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; public class AdfSelectOneListbox extends UixValue { private static final String SUBID_content = "content"; // <div> element private static final String SUBID_item = "item"; // <input type='listbox'> element private static final String SUBID_label = "label"; // <label> element private static final String JS_VALUE_BY_LABEL = JS_FIND_COMPONENT + "var items=comp.getSelectItems(); for (var i=0;i<items.length;i++){if (items[i].getLabel()===arguments[1]) return items[i].getValue()}; return null;"; private static final String JS_LABEL_BY_VALUE = JS_FIND_COMPONENT + "var items=comp.getSelectItems(); for (var i=0;i<items.length;i++){if (items[i].getValue()===arguments[1]) return items[i].getLabel()}; return null;"; public AdfSelectOneListbox(WebDriver webDriver, String clientId) { super(webDriver, clientId); } public void clickItemByIndex(int index) { final WebElement elem = findItem(index); executeScript("arguments[0].scrollIntoView()", elem); // needed in 12.2 elem.click(); // click item within list waitForPpr(); } public void clickItemByLabel(String label) { clickItemByIndex(getValueByLabel(label)); } public String getItemLabel(int index) { return (String) executeScript(JS_LABEL_BY_VALUE, getClientId(), Integer.toString(index)); } public int getValueByLabel(String label) { String value = (String) executeScript(JS_VALUE_BY_LABEL, getClientId(), label); return value == null ? -1 : Integer.valueOf(value); } /** * Gets the label of the selected value. * @return */ public String getValueLabel() { Object value = getValue(); if (value instanceof Number) { return getItemLabel(((Number) value).intValue()); } else if (value instanceof String) { return getItemLabel(Integer.valueOf((String) value)); } else { return null; } } protected WebElement findContent() { return findSubIdElement(SUBID_content); } protected WebElement findItem(int index) { return findSubIdElement(SUBID_item + "[" + index + "]"); } protected WebElement findLabel() { return findSubIdElement(SUBID_label); } }