/******************************************************************************* * Copyright 2014 JHC Systems Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ package jhc.redsniff.webdriver; import jhc.redsniff.webdriver.matchers.ElementDisplayedMatcher; import jhc.redsniff.webdriver.matchers.AttributeMatcher; import jhc.redsniff.webdriver.matchers.SimpleAttributeMatcher; import org.hamcrest.Matcher; import org.openqa.selenium.WebElement; public final class WebDriverMatchers { private WebDriverMatchers() { } /** * Creates a matcher that matches if the examined {@link WebElement} is enabled, * according to the {@link WebElement#isEnabled()} method * @return */ public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> isEnabled() { return jhc.redsniff.webdriver.matchers.EnabledElementMatcher.isEnabled(); } /** * Creates a matcher that matches if the examined {@link WebElement} is disabled * according to the {@link WebElement#isEnabled()} method * @return */ public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> isDisabled() { return jhc.redsniff.webdriver.matchers.EnabledElementMatcher.isDisabled(); } /** * Creates a matcher that matches if the examined {@link WebElement} is displayed, * according to the {@link WebElement#isDisplayed()} method * @return */ public static Matcher<WebElement> isDisplayed() { return ElementDisplayedMatcher.isDisplayed(); } /** * Creates a matcher that matches if the examined {@link WebElement} is not displayed, * according to the {@link WebElement#isDisplayed()} method * @return */ public static Matcher<WebElement> isHidden() { return ElementDisplayedMatcher.isHidden(); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasText( org.hamcrest.Matcher<java.lang.String> stringMatcher) { return jhc.redsniff.webdriver.matchers.TextMatcher.hasText(stringMatcher); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasText(java.lang.String text) { return jhc.redsniff.webdriver.matchers.TextMatcher.hasText(text); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> isSelected() { return jhc.redsniff.webdriver.matchers.ElementSelectedMatcher.isSelected(); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> isUnselected() { return jhc.redsniff.webdriver.matchers.ElementSelectedMatcher.isUnselected(); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasSelectedState(boolean selected) { return jhc.redsniff.webdriver.matchers.ElementSelectedMatcher.hasSelectedState(selected); } /** * Creates a matcher that matches if the examined {@link WebElement} has drop-down options with the given text * as sub-elements within it, in order. * For example: * * <pre><select name ="detective"> * <option id="WA">Wallander</option> * <option id="LU">Lund</option> * <option id="MO">Montalbano</option> * </select></pre> * <pre>t.assertThatThe(first(dropDown()), hasOptions("Wallander", "Lund", "Montalbano"));</pre> */ public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasOptions(java.lang.String... optionText) { return jhc.redsniff.webdriver.matchers.DropDownHasOptions.hasOptions(optionText); } /** * Creates a matcher that matches if the examined {@link WebElement} has drop-down options text that * match the given String matchers in order * For example: * * <pre><select name ="detective"> * <option id="WA">Wallander</option> * <option id="LU">Lund</option> * <option id="MO">Montalbano</option> * </select></pre> * <pre>t.assertThatThe(first(dropDown()), hasOptions(startsWith("Wall"), containsString("nd"), is("Montalbano")));</pre> */ @SafeVarargs public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasOptions( org.hamcrest.Matcher<? super java.lang.String>... optionTextMatchers) { return jhc.redsniff.webdriver.matchers.DropDownHasOptions.hasOptions(optionTextMatchers); } /** * Creates a matcher that matches if the examined {@link WebElement} has drop-down options with the given text * as sub-elements within it, in order. * For example: * * <pre><select name ="detective"> * <option id="WA">Wallander</option> * <option id="LU">Lund</option> * <option id="MO">Montalbano</option> * </select></pre> * <pre>t.assertThatThe(first(dropDown()), hasOptions("Lund", "Montalbano", "Wallander"));</pre> */ public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasOptionsInAnyOrder( java.lang.String... optionText) { return jhc.redsniff.webdriver.matchers.DropDownHasOptions.hasOptionsInAnyOrder(optionText); } /** * Creates a matcher that matches if the examined {@link WebElement} has drop-down options text that * match the given String matchers in any order * For example: * * <pre><select name ="detective"> * <option id="WA">Wallander</option> * <option id="LU">Lund</option> * <option id="MO">Montalbano</option> * </select></pre> * <pre>t.assertThatThe(first(dropDown()), hasOptions( containsString("nd"), is("Montalbano"), startsWith("Wall")));</pre> */ @SafeVarargs public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasOptionsInAnyOrder( org.hamcrest.Matcher<? super java.lang.String>... optionTextMatchers) { return jhc.redsniff.webdriver.matchers.DropDownHasOptions.hasOptionsInAnyOrder(optionTextMatchers); } //String matchers /** * Creates a matcher for string equality which will report the mismatch using the {@link ComparisonCompactor} taken from Junit * @param expected the string to match against * <p/> * For example: * <pre>assertThat("abcde", isString("abce"))</pre> * * <pre>-> Expected: "abce" * but: was: * 'abc[d]e' *instead of: * 'abc[]e' * </pre> */ public static org.hamcrest.Matcher<java.lang.String> isString(java.lang.String expected) { return jhc.redsniff.internal.matchers.StringMatcher.isString(expected); } /** * Creates a matcher that matchers the examined String if that String, after trimming, is equal to the supplied string * @param trimmed * * For example: * <pre>assertThat("Lund \t", trimmedIs("Lund"))</pre> */ public static org.hamcrest.Matcher<java.lang.String> trimmedIs(java.lang.String trimmed) { return jhc.redsniff.internal.matchers.TrimmedStringMatcher.trimmedIs(trimmed); } //Table matchers public static org.hamcrest.Matcher<jhc.redsniff.html.tables.TableCell> valueInColumn( java.lang.Object columnIdentifier, java.lang.String cellContents) { return jhc.redsniff.webdriver.table.matchers.IsTableRowIncluding.valueInColumn(columnIdentifier, cellContents); } public static org.hamcrest.Matcher<jhc.redsniff.html.tables.TableCell> valueInColumn( java.lang.Object columnIdentifier, org.hamcrest.Matcher<jhc.redsniff.html.tables.TableCell> cellMatcher) { return jhc.redsniff.webdriver.table.matchers.IsTableRowIncluding.valueInColumn(columnIdentifier, cellMatcher); } @SafeVarargs public static org.hamcrest.Matcher<jhc.redsniff.html.tables.TableRow> includesCells( org.hamcrest.Matcher<jhc.redsniff.html.tables.TableCell>... included) { return jhc.redsniff.webdriver.table.matchers.IsTableRowIncluding.includesCells(included); } @SafeVarargs public static org.hamcrest.Matcher<jhc.redsniff.html.tables.TableRow> rowIncluding( org.hamcrest.Matcher<jhc.redsniff.html.tables.TableCell>... included) { return jhc.redsniff.webdriver.table.matchers.IsTableRowIncluding.rowIncluding(included); } public static org.hamcrest.Matcher<jhc.redsniff.html.tables.Table> hasHeaderRow( org.hamcrest.Matcher<jhc.redsniff.html.tables.TableRow> headerMatcher) { return jhc.redsniff.webdriver.table.matchers.IsTableWithHeader.hasHeaderRow(headerMatcher); } public static org.hamcrest.Matcher<jhc.redsniff.html.tables.Table> hasHeader( java.util.List<org.hamcrest.Matcher<jhc.redsniff.html.tables.TableCell>> headerRowCells) { return jhc.redsniff.webdriver.table.matchers.IsTableWithHeader.hasHeader(headerRowCells); } public static org.hamcrest.Matcher<jhc.redsniff.html.tables.Table> hasHeaders(java.lang.Object... headers) { return jhc.redsniff.webdriver.table.matchers.IsTableWithHeader.hasHeaders(headers); } public static org.hamcrest.Matcher<jhc.redsniff.html.tables.TableRow> rowConsistingOf(java.lang.Object... fields) { return jhc.redsniff.webdriver.table.matchers.IsTableRowConsistingOf.rowConsistingOf(fields); } public static org.hamcrest.Matcher<jhc.redsniff.html.tables.TableCell> cellWithText( org.hamcrest.Matcher<java.lang.String> textMatcher) { return jhc.redsniff.webdriver.table.matchers.IsTableCellWithText.cellWithText(textMatcher); } public static org.hamcrest.Matcher<jhc.redsniff.html.tables.TableCell> cellWithText( String text) { return jhc.redsniff.webdriver.table.matchers.IsTableCellWithText.cellWithText(text); } @SafeVarargs public static org.hamcrest.Matcher<jhc.redsniff.html.tables.Table> hasDataRows( org.hamcrest.Matcher<jhc.redsniff.html.tables.TableRow>... dataRowMatchers) { return jhc.redsniff.webdriver.table.matchers.IsTableConsistingOfRows.hasDataRows(dataRowMatchers); } /** * Matches a table element that uses blah * * @param tableMatcher * @return */ public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> isTableElementThat( org.hamcrest.Matcher<jhc.redsniff.html.tables.Table> tableMatcher) { return jhc.redsniff.webdriver.table.matchers.TableElementMatcher.isTableElementThat(tableMatcher); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasCssClass( org.hamcrest.Matcher<java.lang.String> cssClassNameMatcher) { return jhc.redsniff.webdriver.matchers.CssClassNameMatcher.hasCssClass(cssClassNameMatcher); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasCssClass(java.lang.String cssClass) { return jhc.redsniff.webdriver.matchers.CssClassNameMatcher.hasCssClass(cssClass); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasName(java.lang.String value) { return jhc.redsniff.webdriver.matchers.NameMatcher.hasName(value); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasTagName(java.lang.String value) { return jhc.redsniff.webdriver.matchers.TagNameMatcher.hasTagName(value); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasName( org.hamcrest.Matcher<java.lang.String> valueMatcher) { return jhc.redsniff.webdriver.matchers.NameMatcher.hasName(valueMatcher); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasValue( org.hamcrest.Matcher<java.lang.String> valueMatcher) { return SimpleAttributeMatcher.hasValue(valueMatcher); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasValue(java.lang.String value) { return SimpleAttributeMatcher.hasValue(value); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasId( org.hamcrest.Matcher<java.lang.String> valueMatcher) { return jhc.redsniff.webdriver.matchers.IdMatcher.hasId(valueMatcher); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasId(java.lang.String value) { return jhc.redsniff.webdriver.matchers.IdMatcher.hasId(value); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasAttribute(java.lang.String attribute, org.hamcrest.Matcher<java.lang.String> stringMatcher) { return AttributeMatcher.hasAttribute(attribute, stringMatcher); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasAttribute(java.lang.String attribute, java.lang.String attributeDescription, org.hamcrest.Matcher<java.lang.String> stringMatcher) { return AttributeMatcher.hasAttribute(attribute, attributeDescription, stringMatcher); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasAttribute(java.lang.String attribute, java.lang.String attributeDescription, String text) { return AttributeMatcher.hasAttribute(attribute, attributeDescription, text); } public static org.hamcrest.Matcher<org.openqa.selenium.WebElement> hasAttribute(java.lang.String attribute, java.lang.String text) { return AttributeMatcher.hasAttribute(attribute, text); } public static org.hamcrest.Matcher<jhc.redsniff.html.tables.TableColumn> isColumnIdentifiedBy( java.lang.Object identifier) { return jhc.redsniff.webdriver.table.matchers.IsTableColumn.isColumnIdentifiedBy(identifier); } public static org.hamcrest.Matcher<WebElement> hasSubElement( jhc.redsniff.core.MFinder<org.openqa.selenium.WebElement, org.openqa.selenium.SearchContext> subElementFinder) { return (Matcher<WebElement>)(Matcher)jhc.redsniff.internal.matchers.HasSubElement.hasSubElement(subElementFinder); } @SafeVarargs public static org.hamcrest.Matcher<jhc.redsniff.html.tables.Table> hasDataRowsIncluding( org.hamcrest.Matcher<jhc.redsniff.html.tables.TableRow>... dataRowMatchers) { return jhc.redsniff.webdriver.table.matchers.IsTableIncludingRows.hasDataRowsIncluding(dataRowMatchers); } }