View Javadoc

1   package com.atlassian.webdriver.utils.element;
2   
3   import com.google.common.collect.Iterables;
4   import org.hamcrest.Description;
5   import org.hamcrest.Matcher;
6   import org.junit.internal.matchers.TypeSafeMatcher;
7   import org.openqa.selenium.WebElement;
8   
9   import static com.google.common.base.Preconditions.checkNotNull;
10  
11  
12  /**
13   * Hamcrest matchers for web elements
14   *
15   * @since v2.2
16   */
17  public final class WebElementMatchers
18  {
19  
20      private WebElementMatchers()
21      {
22          throw new AssertionError("Don't instantiate me");
23      }
24  
25  
26      public static <T> Matcher<Iterable<T>> containsAtLeast(final Matcher<T> elementMatcher, final int numberOfMatchingItems)
27      {
28          return new TypeSafeMatcher<Iterable<T>>()
29          {
30              @Override
31              public boolean matchesSafely(Iterable<T> elements)
32              {
33                  if (Iterables.size(elements) < numberOfMatchingItems)
34                  {
35                      return false;
36                  }
37                  int matchCount = 0;
38                  for (T item : elements)
39                  {
40                      if (elementMatcher.matches(item))
41                      {
42                          matchCount++;
43                      }
44                  }
45                  return matchCount >= numberOfMatchingItems;
46              }
47  
48              public void describeTo(Description description)
49              {
50                  description.appendText("Contains at least ").appendValue(numberOfMatchingItems)
51                          .appendText(" items matching ").appendDescriptionOf(elementMatcher);
52              }
53          };
54      }
55  
56      public static Matcher<WebElement> tagNameEqual(final String expectedTagName)
57      {
58          checkNotNull(expectedTagName);
59          return new TypeSafeMatcher<WebElement>()
60          {
61              @Override
62              public boolean matchesSafely(WebElement item)
63              {
64                  return expectedTagName.equals(item.getTagName());
65              }
66  
67              public void describeTo(Description description)
68              {
69                  description.appendText("Tag name should be equal to ").appendValue(expectedTagName);
70              }
71          };
72      }
73  }