View Javadoc

1   package com.atlassian.pageobjects.elements;
2   
3   import com.atlassian.annotations.PublicApi;
4   import com.atlassian.webdriver.Elements;
5   import com.google.common.base.Function;
6   import com.google.common.base.Predicate;
7   import org.apache.commons.lang.StringUtils;
8   
9   import javax.annotation.Nonnull;
10  import java.util.Set;
11  
12  import static com.google.common.base.Preconditions.checkNotNull;
13  
14  /**
15   * Predicates and functions for easier usage of {@link PageElement page elements}.
16   *
17   * @since 2.3
18   */
19  @PublicApi
20  public final class PageElements
21  {
22      public static final String BODY = Elements.TAG_BODY;
23      public static final String TR = Elements.TAG_TR;
24      public static final String TD = Elements.TAG_TD;
25  
26      public static final String DATA_PREFIX = "data-";
27  
28      private PageElements()
29      {
30          throw new AssertionError("Do not instantiate " + getClass().getSimpleName());
31      }
32  
33      @Nonnull
34      public static Function<PageElement, String> getText()
35      {
36          return new Function<PageElement, String>()
37          {
38              @Override
39              public String apply(PageElement input)
40              {
41                  return StringUtils.stripToNull(input.getText());
42              }
43          };
44      }
45  
46      @Nonnull
47      public static Predicate<PageElement> isVisible()
48      {
49          return new Predicate<PageElement>()
50          {
51              @Override
52              public boolean apply(PageElement input)
53              {
54                  return input.isVisible();
55              }
56          };
57      }
58  
59      @Nonnull
60      public static Predicate<PageElement> hasClass(@Nonnull final String className)
61      {
62          checkNotNull(className, "className");
63  
64          return new Predicate<PageElement>()
65          {
66              @Override
67              public boolean apply(PageElement input)
68              {
69                  return input.hasClass(className);
70              }
71          };
72      }
73  
74      @Nonnull
75      public static Predicate<PageElement> hasAttribute(@Nonnull final String attribute)
76      {
77          checkNotNull(attribute, "attribute");
78  
79          return new Predicate<PageElement>()
80          {
81              @Override
82              public boolean apply(PageElement input)
83              {
84                  return input.getAttribute(attribute) != null;
85              }
86          };
87      }
88  
89      @Nonnull
90      public static Predicate<PageElement> hasAttribute(@Nonnull final String attribute, @Nonnull final String value)
91      {
92          checkNotNull(attribute, "attribute");
93          checkNotNull(value, "value");
94  
95          return new Predicate<PageElement>()
96          {
97              @Override
98              public boolean apply(PageElement input)
99              {
100                 return input.hasAttribute(attribute, value);
101             }
102         };
103     }
104 
105     @Nonnull
106     public static Predicate<PageElement> hasDataAttribute(@Nonnull final String attribute)
107     {
108         checkNotNull(attribute, "attribute");
109 
110         return hasAttribute(DATA_PREFIX + attribute);
111     }
112 
113     @Nonnull
114     public static Predicate<PageElement> hasDataAttribute(@Nonnull final String attribute, @Nonnull final String value)
115     {
116         checkNotNull(attribute, "attribute");
117 
118         return hasAttribute(DATA_PREFIX + attribute, value);
119     }
120 
121     @Nonnull
122     public static Predicate<PageElement> hasValue(@Nonnull final String value)
123     {
124         checkNotNull(value, "value");
125 
126         return new Predicate<PageElement>()
127         {
128             @Override
129             public boolean apply(PageElement input)
130             {
131                 return value.equals(input.getValue());
132             }
133         };
134     }
135 
136     @Nonnull
137     public static Function<PageElement, Iterable<String>> getCssClasses()
138     {
139         return new Function<PageElement, Iterable<String>>()
140         {
141             @Override
142             public Set<String> apply(PageElement input)
143             {
144                 return input.getCssClasses();
145             }
146         };
147     }
148 
149     @Nonnull
150     public static Function<PageElement, String> getAttribute(@Nonnull final String attributeName)
151     {
152         checkNotNull(attributeName, "attributeName");
153 
154         return new Function<PageElement, String>()
155         {
156             @Override
157             public String apply(PageElement input)
158             {
159                 return input.getAttribute(attributeName);
160             }
161         };
162     }
163 
164     @Nonnull
165     public static Function<PageElement, String> getDataAttribute(@Nonnull final String attributeName)
166     {
167         checkNotNull(attributeName, "attributeName");
168 
169         return new Function<PageElement, String>()
170         {
171             @Override
172             public String apply(PageElement input)
173             {
174                 return input.getAttribute(DATA_PREFIX + attributeName);
175             }
176         };
177     }
178 }