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&lt;WebElement&gt; filters = driver.findElements(selector.someWebElement());
        Map&lt;String, WebElement&gt; mapFilters = new HashMap();
        for (int i = 0; i &lt; 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&lt;WebElement&gt;, to build a Map&lt;String, WebElement&gt;, 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&lt;WebElement&gt; filters = driver.findElements(selector.someWebElement());
    WebElement value = null;
    for (int i = 0; i &lt; 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&lt;WebElement&gt; filters = driver.findElements(selector.someWebElement());



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