package com.abmash.core.query.predicate;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import com.abmash.api.query.QueryFactory;
import com.abmash.core.jquery.JQuery;
import com.abmash.core.jquery.JQueryFactory;
import com.abmash.core.query.DirectionOptions;
import com.abmash.core.query.DirectionType;
public class ClickablePredicate extends LinkPredicate {
public ClickablePredicate(String text) {
super(text);
}
@Override
public void buildCommands() {
super.buildCommands();
List<String> clickablePrimarySelectors = Arrays.asList("input[type=checkbox]", "input[type=radio]", "input[type=submit]", "input[type=button]", "input[type=image]", "input[type=range]", "input[type=color]", "button");
List<String> clickableSecondarySelectors = Arrays.asList("*[onclick]");
JQuery primaryQuery = JQueryFactory.select("'" + StringUtils.join(clickablePrimarySelectors, ',') + "'", 0);
JQuery secondaryQuery = JQueryFactory.select("'" + StringUtils.join(clickableSecondarySelectors, ',') + "'", -500);
if(text != null) {
containsText(primaryQuery, text);
containsAttribute(primaryQuery, "*", text);
containsText(secondaryQuery, text);
containsAttribute(secondaryQuery, "*", text);
// close to label
closeTo(
primaryQuery.setWeight(50),
new DirectionOptions(DirectionType.CLOSETOCLICKABLELABEL).setLimitPerTarget(1).setMaxDistance(300),
new TextPredicate(text)
);
closeTo(
secondaryQuery,
new DirectionOptions(DirectionType.CLOSETOCLICKABLELABEL).setLimitPerTarget(1).setMaxDistance(300),
new TextPredicate(text)
);
} else {
add(primaryQuery.setWeight(100));
add(secondaryQuery);
}
}
}