snippetjavaMinor
Selecting filter checkboxes using Selenium
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
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
But you use only one key in the map, the
This implementation is (almost) equivalent:
I say almost equivalent, because I added a missed
To further improve the performance, it would be better to refine this call:
As apparently it fetches many elements that don't match the
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.