package com.redheap.selenium.component;
import com.redheap.selenium.component.uix.UixValue;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.WebElement;
public class AdfSelectOneRadio extends UixValue {
// see http://jdevadf.oracle.com/adf-richclient-demo/docs/js-subids.html
private static final String SUBID_content = "content"; // <div> element
private static final String SUBID_item = "item"; // <input type='radio'> element
private static final String SUBID_label = "label"; // <label> element
private static final String JS_GET_LABEL_ELEMENT =
JS_FIND_ELEMENT + "return AdfDomUtils.getDescendentElement(elem, 'label', arguments[1])";
public AdfSelectOneRadio(WebDriver webDriver, String clientId) {
super(webDriver, clientId);
}
public void clickItemByIndex(int index) {
findItem(index).click();
waitForPpr();
}
public void clickItemByLabel(String label) {
int index = getIndexByLabel(label);
if (index == -1) {
throw new WebDriverException("item with label " + label + " not found");
}
clickItemByIndex(index);
}
public String getItemLabel(int index) {
WebElement label = (WebElement) executeScript(JS_GET_LABEL_ELEMENT, getClientId(), index);
return label.getText();
}
public int getIndexByLabel(String label) {
List<WebElement> labels = getElement().findElements(By.tagName("label"));
for (int i = 0, n = labels.size(); i < n; i++) {
if (label.equals(labels.get(i).getText())) {
return i;
}
}
return -1; // not found
}
protected WebElement findContent() {
return findSubIdElement(SUBID_content);
}
protected WebElement findItem(int index) {
return findSubIdElement(SUBID_item + "[" + index + "]");
}
protected WebElement findLabel() {
return findSubIdElement(SUBID_label);
}
}