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
14
15
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 }