1 package com.atlassian.webdriver.waiter.webdriver;
2
3 import com.atlassian.annotations.ExperimentalApi;
4 import com.atlassian.webdriver.waiter.webdriver.retriever.WebElementRetriever;
5 import com.atlassian.webdriver.waiter.WaiterQuery;
6 import com.atlassian.webdriver.waiter.webdriver.function.ConditionFunction;
7 import com.atlassian.webdriver.waiter.ElementQuery;
8 import com.atlassian.webdriver.waiter.ExecutableWaiterQuery;
9 import com.atlassian.webdriver.waiter.FunctionQuery;
10 import com.atlassian.webdriver.waiter.Query;
11 import com.google.common.base.Function;
12 import org.apache.commons.lang.NotImplementedException;
13 import org.openqa.selenium.By;
14 import org.openqa.selenium.SearchContext;
15 import org.openqa.selenium.WebDriver;
16 import org.openqa.selenium.WebElement;
17
18
19
20
21
22
23
24 @ExperimentalApi
25 class WebDriverWaiterQuery implements WaiterQuery
26 {
27 private final WebDriverQueryBuilder queryBuilder;
28
29 public WebDriverWaiterQuery(WebDriverQueryBuilder builder)
30 {
31 this.queryBuilder = builder;
32 }
33
34 public FunctionQuery function(ConditionFunction func)
35 {
36 return new WebDriverFunctionQuery(queryBuilder, func);
37 }
38
39 public ElementQuery element(final By locator)
40 {
41 return element(locator, queryBuilder.getDriver());
42 }
43
44 public ElementQuery element(final By locator, final SearchContext context)
45 {
46 return new WebDriverElementQuery(queryBuilder, WebElementRetriever.newLocatorRetriever(locator, context));
47 }
48
49 public ElementQuery element(final WebElement element)
50 {
51 return new WebDriverElementQuery(queryBuilder, WebElementRetriever.newWebElementRetriever(element));
52 }
53
54 static class WebDriverExecutableWaiterQuery
55 implements ExecutableWaiterQuery
56 {
57
58 private final WebDriverQueryBuilder queryBuilder;
59
60 public WebDriverExecutableWaiterQuery(WebDriverQueryBuilder queryBuilder) {
61 this.queryBuilder = queryBuilder;
62 }
63
64 public void execute()
65 {
66 Function<WebDriver,Boolean> func = queryBuilder.build();
67 new AtlassianWebDriverWait(queryBuilder.getDriver(), queryBuilder.getTimeout()).until(func);
68 }
69
70 public WaiterQuery and()
71 {
72 queryBuilder.add(new AndQuery());
73 return new WebDriverWaiterQuery(queryBuilder);
74 }
75
76 public WaiterQuery or()
77 {
78 queryBuilder.add(new OrQuery());
79 return new WebDriverWaiterQuery(queryBuilder);
80 }
81 }
82
83 static class AndQuery implements Query {
84 public ConditionFunction build()
85 {
86 throw new NotImplementedException("This should not be called.");
87 }
88 }
89
90 static class OrQuery implements Query {
91 public ConditionFunction build()
92 {
93 throw new NotImplementedException("This should not be called.");
94 }
95 }
96 }