package br.com.caelum.seleniumdsl.htmlunit; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import br.com.caelum.seleniumdsl.Form; import br.com.caelum.seleniumdsl.SelectField; import com.gargoylesoftware.htmlunit.html.HtmlOption; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlSelect; import com.gargoylesoftware.htmlunit.javascript.host.Event; class HtmlUnitSelectField implements SelectField { private final HtmlSelect select; private final HtmlUnitForm parent; public HtmlUnitSelectField(HtmlUnitForm parent, HtmlSelect select) { this.parent = parent; this.select = select; } public Form choose(String value) { for (HtmlOption option : select.getOptions()) { if (option.getText().trim().equals(value)) { parent.getParent().setPage((HtmlPage) select.setSelectedAttribute(option, true)); return parent; } } throw new IllegalArgumentException("No option found with value: '" + value + "'. Values: " + Arrays.toString(values())); } public Form choose(int index) { select.getOption(index).setSelected(true); return parent; } public String content() { return select.getSelectedOptions().get(0).getText().trim(); } public String value() { return select.getSelectedOptions().get(0).getValueAttribute(); } public String[] values() { List<String> options = new ArrayList<String>(); for (HtmlOption option : select.getOptions()) { options.add(option.getText()); } String[] values = new String[select.getOptionSize()]; return options.toArray(values); } public void blur() { select.fireEvent(Event.TYPE_BLUR); } }