1 package com.atlassian.webdriver.waiter.webdriver;
2
3 import com.atlassian.annotations.ExperimentalApi;
4
5 import com.atlassian.webdriver.waiter.webdriver.function.ConditionFunction;
6 import com.atlassian.webdriver.waiter.ElementQuery;
7 import com.atlassian.webdriver.waiter.ExecutableWaiterQuery;
8 import com.atlassian.webdriver.waiter.Query;
9 import com.atlassian.webdriver.waiter.StringValueQuery;
10 import com.atlassian.webdriver.waiter.webdriver.function.NotFunction;
11 import com.atlassian.webdriver.waiter.webdriver.function.element.ExistsFunction;
12 import com.atlassian.webdriver.waiter.webdriver.function.element.HasClassFunction;
13 import com.atlassian.webdriver.waiter.webdriver.function.element.IsEnabledFunction;
14 import com.atlassian.webdriver.waiter.webdriver.function.element.IsSelectedFunction;
15 import com.atlassian.webdriver.waiter.webdriver.function.element.IsVisibleFunction;
16 import com.atlassian.webdriver.waiter.webdriver.retriever.WebElementFieldRetriever;
17 import com.atlassian.webdriver.waiter.webdriver.retriever.WebElementRetriever;
18
19
20
21
22
23
24
25 @ExperimentalApi
26 public class WebDriverElementQuery implements ElementQuery
27 {
28 private final WebDriverQueryBuilder builder;
29 private final WebElementRetriever webElementRetriever;
30
31 public WebDriverElementQuery(WebDriverQueryBuilder builder, WebElementRetriever webElementRetriever)
32 {
33 this.builder = builder;
34 this.webElementRetriever = webElementRetriever;
35 }
36
37 public ExecutableWaiterQuery isVisible()
38 {
39 return createExecutableWaiterQuery(new IsVisibleFunction(webElementRetriever));
40 }
41
42 public ExecutableWaiterQuery isNotVisible()
43 {
44 return createExecutableWaiterQuery(not(new IsVisibleFunction(webElementRetriever)));
45 }
46
47 public ExecutableWaiterQuery exists()
48 {
49 return createExecutableWaiterQuery(new ExistsFunction(webElementRetriever));
50 }
51
52 public ExecutableWaiterQuery doesNotExist()
53 {
54 return createExecutableWaiterQuery(not(new ExistsFunction(webElementRetriever)));
55 }
56
57 public StringValueQuery getAttribute(String attributeName)
58 {
59 return new WebDriverFieldQuery(builder,
60 WebElementFieldRetriever.newAttributeRetriever(webElementRetriever, attributeName));
61 }
62
63 public ExecutableWaiterQuery isSelected()
64 {
65 return createExecutableWaiterQuery(new IsSelectedFunction(webElementRetriever));
66 }
67
68 public ExecutableWaiterQuery isNotSelected()
69 {
70 return createExecutableWaiterQuery(not(new IsSelectedFunction(webElementRetriever)));
71 }
72
73 public ExecutableWaiterQuery isEnabled()
74 {
75 return createExecutableWaiterQuery(new IsEnabledFunction(webElementRetriever));
76 }
77
78 public ExecutableWaiterQuery isNotEnabled()
79 {
80 return createExecutableWaiterQuery(not(new IsEnabledFunction(webElementRetriever)));
81 }
82
83 public ExecutableWaiterQuery hasClass(String className)
84 {
85 return createExecutableWaiterQuery(new HasClassFunction(webElementRetriever, className));
86 }
87
88 public ExecutableWaiterQuery doesNotHaveClass(final String className)
89 {
90 return createExecutableWaiterQuery(not(new HasClassFunction(webElementRetriever, className)));
91 }
92
93 public StringValueQuery getText()
94 {
95 return new WebDriverFieldQuery(builder,
96 WebElementFieldRetriever.newTextRetriever(webElementRetriever));
97 }
98
99 private ConditionFunction not(ConditionFunction func)
100 {
101 return new NotFunction(func);
102 }
103
104 private ExecutableWaiterQuery createExecutableWaiterQuery(final ConditionFunction function)
105 {
106 builder.add(new Query()
107 {
108 @Override
109 public ConditionFunction build()
110 {
111 return function;
112 }
113 });
114 return new WebDriverWaiterQuery.WebDriverExecutableWaiterQuery(builder);
115 }
116
117 }