1   package com.atlassian.pageobjects.elements;
2   
3   import com.atlassian.pageobjects.PageBinder;
4   import com.atlassian.pageobjects.binder.Init;
5   import com.atlassian.pageobjects.elements.query.TimedCondition;
6   import com.atlassian.pageobjects.elements.query.TimedQuery;
7   import com.atlassian.pageobjects.elements.query.webdriver.WebDriverQueryFactory;
8   import com.atlassian.pageobjects.elements.timeout.TimeoutType;
9   
10  import javax.inject.Inject;
11  
12  import static com.google.common.base.Preconditions.checkNotNull;
13  
14  /**
15   * Implementation of TimedElement based on WebDriver
16   */
17  public class WebDriverTimedElement implements TimedElement
18  {
19      @Inject
20      PageBinder pageBinder;
21  
22      private WebDriverQueryFactory queryFactory;
23      private final WebDriverLocatable locatable;
24      private final TimeoutType defaultTimeout;
25  
26      /**
27       * Create a WebDriverTimedElement with the given timeout.
28       *
29       * @param locatable locatable for the target element
30       * @param defaultTimeout default timeout of this element
31       */
32      public WebDriverTimedElement(WebDriverLocatable locatable, TimeoutType defaultTimeout)
33      {
34          this.locatable = checkNotNull(locatable);
35          this.defaultTimeout = checkNotNull(defaultTimeout);
36      }
37  
38      @Init
39      public void initialize()
40      {
41          queryFactory = pageBinder.bind(WebDriverQueryFactory.class, locatable);
42      }
43      
44      public TimedCondition isPresent()
45      {
46          return queryFactory.isPresent(defaultTimeout);
47      }
48  
49      public TimedCondition isVisible()
50      {
51          return queryFactory.isVisible(defaultTimeout);
52      }
53  
54      public TimedCondition isEnabled()
55      {
56          return queryFactory.isEnabled(defaultTimeout);
57      }
58  
59      public TimedCondition isSelected()
60      {
61          return queryFactory.isSelected(defaultTimeout);
62      }
63  
64      public TimedCondition hasClass(final String className)
65      {
66          return queryFactory.hasClass(className, defaultTimeout);
67      }
68  
69      public TimedQuery<String> getAttribute(final String name)
70      {
71          return queryFactory.getAttribute(name, defaultTimeout);
72      }
73  
74      public TimedCondition hasAttribute(final String name, final String value)
75      {
76          return queryFactory.hasAttribute(name, value, defaultTimeout);
77      }
78  
79      public TimedQuery<String> getText()
80      {
81          return queryFactory.getText(defaultTimeout);
82      }
83  
84      public TimedCondition hasText(String text)
85      {
86          return queryFactory.hasText(text, defaultTimeout);
87      }
88  
89      public TimedQuery<String> getTagName()
90      {
91          /* Even though the tagname can't change, the reason why we go through the same query mechanism is to
92          get the polling for finding the element */
93          return queryFactory.getTagName(defaultTimeout);
94      }
95  
96      public TimedQuery<String> getValue()
97      {
98          return queryFactory.getValue(defaultTimeout);
99      }
100 }