HiveBrain v1.2.0
Get Started
← Back to all entries
snippetjavaMinor

Selecting filter checkboxes using Selenium

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
checkboxesseleniumfilterusingselecting

Problem

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 filters = driver.findElements(selector.someWebElement());
        Map 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();
    }

Solution

The method appears to have some pointless operations.

You loop over a List, to build a Map, 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 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 filters = driver.findElements(selector.someWebElement());


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

Code Snippets

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();
    }
}
List<WebElement> filters = driver.findElements(selector.someWebElement());

Context

StackExchange Code Review Q#113494, answer score: 6

Revisions (0)

No revisions yet.