package org.fluentlenium.core.conditions; import org.fluentlenium.core.FluentDriver; import org.fluentlenium.core.domain.FluentWebElement; import java.util.List; import java.util.function.Predicate; /** * Conditions for list of elements, matching when each element matches. */ public class EachElementConditions extends AbstractFluentListConditions { /** * Creates a new element list conditions. * * @param elements underlying elements */ public EachElementConditions(List<? extends FluentWebElement> elements) { super(elements); } @Override public EachElementConditions not() { EachElementConditions negatedConditions = new EachElementConditions(getElements()); negatedConditions.setNegation(!isNegation()); return negatedConditions; } @Override public boolean verify(Predicate<FluentWebElement> predicate, boolean defaultValue) { if (isNegation()) { predicate = predicate.negate(); defaultValue = !defaultValue; } return buildEachElementPredicate(predicate, defaultValue).test(null); } /** * Build predicate for this condition. * * @param predicate predicate * @param defaultValue default value if elements list is empty. * @return predicate */ protected Predicate<FluentDriver> buildEachElementPredicate(Predicate<FluentWebElement> predicate, boolean defaultValue) { Predicate<FluentDriver> untilPredicate = fluent -> { if (getElements().size() > 0) { for (FluentWebElement element : getElements()) { if (!predicate.test(element)) { return false; } } return true; } return defaultValue; }; return untilPredicate; } }