in module/geb-core/src/main/groovy/geb/navigator/SearchContextBasedBasicLocator.groovy [161:186]
protected String optimizeSelector(String selector, Map<String, Object> attributes) {
if (!selector) {
return selector
}
def buffer = new StringBuilder(selector)
for (def it = attributes.entrySet().iterator(); it.hasNext();) {
def attribute = it.next()
if (!(attribute.key in NON_SELECTOR_TRANSLATABLE_ATTRIBUTES) && attribute.value instanceof CharSequence) {
def attributeValue = attribute.value.toString()
if (attribute.key == "class") {
attributeValue.split(/\s+/).each { className ->
buffer << "." << CssSelector.escape(className)
}
} else {
buffer << """[${attribute.key}="${CssSelector.escape(attributeValue)}"]"""
}
it.remove()
}
}
if (buffer[0] == MATCH_ALL_SELECTOR && buffer.length() > 1) {
buffer.deleteCharAt(0)
}
buffer.toString()
}