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
16
17
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 }