diff --git a/src/main/java/io/github/seleniumquery/SeleniumQueryWaitEvaluateUntil.java b/src/main/java/io/github/seleniumquery/SeleniumQueryWaitEvaluateUntil.java index 10f82aa1..e222b05d 100644 --- a/src/main/java/io/github/seleniumquery/SeleniumQueryWaitEvaluateUntil.java +++ b/src/main/java/io/github/seleniumquery/SeleniumQueryWaitEvaluateUntil.java @@ -47,6 +47,16 @@ public interface SeleniumQueryWaitEvaluateUntil { */ SeleniumQueryWaitAndOrThen contains(String string); + /** + * Tests if the result of the preceding function contains the given argument ignoring text case. + * + * @param string The string the function call result must contain. + * @return An element that allows chaining of further waiting conditions or calling regular functions. + * + * @since 0.18.0 + */ + SeleniumQueryWaitAndOrThen containsIgnoreCase(String string); + /** * Tests if the result of the preceding function matches the given regex. * diff --git a/src/main/java/io/github/seleniumquery/wait/EvaluateUntil.java b/src/main/java/io/github/seleniumquery/wait/EvaluateUntil.java index d33b47c9..8573b294 100644 --- a/src/main/java/io/github/seleniumquery/wait/EvaluateUntil.java +++ b/src/main/java/io/github/seleniumquery/wait/EvaluateUntil.java @@ -19,10 +19,7 @@ import io.github.seleniumquery.SeleniumQueryObject; import io.github.seleniumquery.SeleniumQueryWaitAndOrThen; import io.github.seleniumquery.SeleniumQueryWaitEvaluateUntil; -import io.github.seleniumquery.wait.evaluators.ContainsEvaluator; -import io.github.seleniumquery.wait.evaluators.EqualsEvaluator; -import io.github.seleniumquery.wait.evaluators.Evaluator; -import io.github.seleniumquery.wait.evaluators.MatchesEvaluator; +import io.github.seleniumquery.wait.evaluators.*; import io.github.seleniumquery.wait.evaluators.comparison.GreaterThanEvaluator; import io.github.seleniumquery.wait.evaluators.comparison.LessThanEvaluator; import io.github.seleniumquery.wait.getters.Getter; @@ -66,6 +63,12 @@ public SeleniumQueryWaitAndOrThen contains(String string) { return new AndOrThen(fluentWait.waitUntil(containsEvaluator, string, seleniumQueryObject, this.negated)); } + @Override + public SeleniumQueryWaitAndOrThen containsIgnoreCase(String string) { + Evaluator containsEvaluator = new ContainsIgnoreCaseEvaluator(getter); + return new AndOrThen(fluentWait.waitUntil(containsEvaluator, string, seleniumQueryObject, this.negated)); + } + @Override public SeleniumQueryWaitAndOrThen matches(String regex) { Evaluator matchesEvaluator = new MatchesEvaluator(getter); diff --git a/src/main/java/io/github/seleniumquery/wait/evaluators/ContainsIgnoreCaseEvaluator.java b/src/main/java/io/github/seleniumquery/wait/evaluators/ContainsIgnoreCaseEvaluator.java new file mode 100644 index 00000000..cf7eed9f --- /dev/null +++ b/src/main/java/io/github/seleniumquery/wait/evaluators/ContainsIgnoreCaseEvaluator.java @@ -0,0 +1,30 @@ +package io.github.seleniumquery.wait.evaluators; + +import io.github.seleniumquery.wait.WaitingBehaviorModifier; +import io.github.seleniumquery.wait.getters.Getter; +import org.apache.commons.lang3.StringUtils; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +import java.util.List; + +public class ContainsIgnoreCaseEvaluator implements Evaluator { + private Getter getter; + + public ContainsIgnoreCaseEvaluator(Getter getter) { + this.getter = getter; + } + + @Override + public boolean evaluate(WebDriver driver, List elements, String valueToEqual) { + Object propertyGot = getter.get(driver, elements); + + return propertyGot != null && StringUtils.containsIgnoreCase(propertyGot.toString(), valueToEqual); + } + + @Override + public String stringFor(String valueToEqual, WaitingBehaviorModifier waitingBehaviorModifier) { + return getter.toString() + waitingBehaviorModifier + ".containsIgnoreCase(\"" + valueToEqual + "\")"; + } + +}