# Selecting filter checkboxes using Selenium

I am using Selenium Webdriver via Java. My method clicks on a filter check box (eg. make, model, etc.), that is passed in, from a modal.

When running my method in my test class, via ChromeDriver, it seems to go pretty slow and rightfully so since I am making a lot of tiny network calls for getText(). How can I optimize its performance?

public void selectFilter(String filter) {
List<WebElement> filters = driver.findElements(selector.someWebElement());
Map<String, WebElement> mapFilters = new HashMap();
for (int i = 0; i < filters.size(); i++) {
String key = filters.get(i).getText();
WebElement value = filters.get(i).findElement(By.cssSelector("a"));
mapFilters.put(key, value);
}
mapFilters.get(filter).click();
}


The method appears to have some pointless operations.

You loop over a List<WebElement>, to build a Map<String, WebElement>, where the key of the map is the text in a WebElement in the list. But you use only one key in the map, the String filter parameter received by the method. As such, you don't need a map at all.

This implementation is (almost) equivalent:

public void selectFilter(String filter) {
List<WebElement> filters = driver.findElements(selector.someWebElement());
WebElement value = null;
for (int i = 0; i < filters.size(); i++) {
String key = filters.get(i).getText();
if (key.equals(filter)) {
value = filters.get(i).findElement(By.cssSelector("a"));
}
}
if (value != null) {
value.click();
}
}


I say almost equivalent, because I added a missed null-check.

To further improve the performance, it would be better to refine this call:

    List<WebElement> filters = driver.findElements(selector.someWebElement());


As apparently it fetches many elements that don't match the String filter parameter of the method.

• Oh wow, I was over complicating things. This is why codereview is an awesome site. Thank you very much! Once I reach 15 reputation points I will make sure to upvote your answer. – Robben Dec 10 '15 at 21:10