View Javadoc

1   package com.atlassian.pageobjects.elements.test.query;
2   
3   import com.atlassian.pageobjects.elements.WebDriverLocatable;
4   import com.atlassian.pageobjects.elements.WebDriverLocators;
5   import com.atlassian.pageobjects.elements.query.Poller;
6   import com.atlassian.pageobjects.elements.query.TimedQuery;
7   import com.atlassian.pageobjects.elements.query.webdriver.WebDriverQueryFactory;
8   import com.atlassian.pageobjects.elements.timeout.MapBasedTimeouts;
9   import com.atlassian.pageobjects.elements.timeout.TimeoutType;
10  import com.atlassian.pageobjects.elements.timeout.Timeouts;
11  import com.atlassian.webdriver.AtlassianWebDriver;
12  import com.google.common.collect.ImmutableMap;
13  import org.junit.Test;
14  import org.openqa.selenium.By;
15  import org.openqa.selenium.NoSuchElementException;
16  import org.openqa.selenium.WebElement;
17  
18  import static com.atlassian.pageobjects.elements.query.Poller.by;
19  import static com.atlassian.pageobjects.elements.query.Poller.byDefaultTimeout;
20  import static com.atlassian.pageobjects.elements.query.Poller.now;
21  import static org.hamcrest.Matchers.is;
22  import static org.junit.Assert.assertEquals;
23  import static org.mockito.Matchers.any;
24  import static org.mockito.Mockito.mock;
25  import static org.mockito.Mockito.when;
26  
27  /**
28   * Test case for {@link com.atlassian.pageobjects.elements.query.webdriver.WebDriverQueryFactory}.
29   *
30   */
31  public class TestWebDriverQueryFactory
32  {
33  
34      private Timeouts timeouts = new MapBasedTimeouts(ImmutableMap.<TimeoutType, Long>of(
35              TimeoutType.DEFAULT, 500L,
36              TimeoutType.EVALUATION_INTERVAL, 100L,
37              TimeoutType.COMPONENT_LOAD, 200L
38      ));
39  
40      @Test
41      public void shouldSetUpQueryWithCustomDefaultTimeout()
42      {
43          WebDriverLocatable locatable = singleTestLocatable();
44          AtlassianWebDriver mockElementPresentDriver = mock(AtlassianWebDriver.class);
45          WebDriverQueryFactory tested = new WebDriverQueryFactory(locatable, timeouts, mockElementPresentDriver);
46  
47          TimedQuery<Boolean> result = tested.isPresent(TimeoutType.COMPONENT_LOAD);
48          assertEquals(100L, result.interval());
49          assertEquals(200L, result.defaultTimeout());
50      }
51  
52      @Test
53      public void shouldReturnValidIsPresentQuery()
54      {
55          WebElement mockElement = newMockElement();
56          AtlassianWebDriver mockDriver = mock(AtlassianWebDriver.class);
57          when(mockDriver.findElement(any(By.class))).thenReturn(mockElement);
58          WebDriverQueryFactory tested = new WebDriverQueryFactory(singleTestLocatable(), timeouts, mockDriver);
59  
60          TimedQuery<Boolean> result = tested.isPresent();
61          assertEquals(100L, result.interval());
62          assertEquals(500L, result.defaultTimeout());
63          Poller.waitUntil(result, is(true), now());
64      }
65  
66      @Test
67      public void shouldReturnFalseIsPresentQuery()
68      {
69          AtlassianWebDriver mockDriver = mock(AtlassianWebDriver.class);
70          when(mockDriver.findElement(any(By.class))).thenThrow(new NoSuchElementException("Cause you've got issues"));
71          WebDriverQueryFactory tested = new WebDriverQueryFactory(singleTestLocatable(), timeouts, mockDriver);
72  
73          TimedQuery<Boolean> result = tested.isPresent();
74          assertEquals(100L, result.interval());
75          assertEquals(500L, result.defaultTimeout());
76          Poller.waitUntil(result, is(false), by(1000));
77      }
78  
79      @Test
80      public void shouldReturnIsVisibleQueryThatIsTrueNow()
81      {
82          WebElement mockElement = mock(WebElement.class);
83          when(mockElement.isDisplayed()).thenReturn(true);
84          AtlassianWebDriver mockDriver = mock(AtlassianWebDriver.class);
85          when(mockDriver.findElement(any(By.class))).thenReturn(mockElement);
86          WebDriverQueryFactory tested = new WebDriverQueryFactory(singleTestLocatable(), timeouts, mockDriver);
87  
88          TimedQuery<Boolean> result = tested.isVisible();
89          assertEquals(100L, result.interval());
90          assertEquals(500L, result.defaultTimeout());
91          Poller.waitUntil(result, is(true), now());
92      }
93  
94      @Test
95      public void shouldReturnIsVisibleQueryThatIsTrueInAWhile()
96      {
97          WebElement mockElement = mock(WebElement.class);
98          when(mockElement.isDisplayed()).thenReturn(false, false, false, false, true);
99          AtlassianWebDriver mockDriver = mock(AtlassianWebDriver.class);
100         when(mockDriver.findElement(any(By.class))).thenReturn(mockElement);
101         WebDriverQueryFactory tested = new WebDriverQueryFactory(singleTestLocatable(), timeouts, mockDriver);
102 
103         TimedQuery<Boolean> result = tested.isVisible();
104         assertEquals(100L, result.interval());
105         assertEquals(500L, result.defaultTimeout());
106         Poller.waitUntil(result, is(false), now());
107         Poller.waitUntil(result, is(true), by(1000));
108     }
109 
110     @Test
111     public void shouldReturnIsVisibleQueryThatIsFalse()
112     {
113         WebElement mockElement = mock(WebElement.class);
114         when(mockElement.isDisplayed()).thenReturn(false);
115         AtlassianWebDriver mockDriver = mock(AtlassianWebDriver.class);
116         when(mockDriver.findElement(any(By.class))).thenReturn(mockElement);
117         WebDriverQueryFactory tested = new WebDriverQueryFactory(singleTestLocatable(), timeouts, mockDriver);
118 
119         TimedQuery<Boolean> result = tested.isVisible();
120         assertEquals(100L, result.interval());
121         assertEquals(500L, result.defaultTimeout());
122         Poller.waitUntil(result, is(false), by(1000));
123     }
124 
125     @Test
126     public void hasClassQueryShouldReturnTrueForSimpleMatch()
127     {
128         WebElement mockElement = mock(WebElement.class);
129         when(mockElement.getAttribute("class")).thenReturn("oneclass secondclass someotherclasssss");
130         AtlassianWebDriver mockDriver = mock(AtlassianWebDriver.class);
131         when(mockDriver.findElement(any(By.class))).thenReturn(mockElement);
132         WebDriverQueryFactory tested = new WebDriverQueryFactory(singleTestLocatable(), timeouts, mockDriver);
133 
134         Poller.waitUntil(tested.hasClass("oneclass"), is(true), now());
135         Poller.waitUntil(tested.hasClass("secondclass"), is(true), now());
136         Poller.waitUntil(tested.hasClass("someotherclasssss"), is(true), now());
137         Poller.waitUntil(tested.hasClass("blahblah"), is(false), byDefaultTimeout());
138     }
139 
140     @Test
141     public void hasClassQueryShouldBeCaseInsensitive()
142     {
143         WebElement mockElement = mock(WebElement.class);
144         when(mockElement.getAttribute("class")).thenReturn("oneclass secOndclAss soMeotherclasSsss");
145         AtlassianWebDriver mockDriver = mock(AtlassianWebDriver.class);
146         when(mockDriver.findElement(any(By.class))).thenReturn(mockElement);
147         WebDriverQueryFactory tested = new WebDriverQueryFactory(singleTestLocatable(), timeouts, mockDriver);
148 
149         Poller.waitUntil(tested.hasClass("Oneclass"), is(true), now());
150         Poller.waitUntil(tested.hasClass("SECondclAss"), is(true), now());
151         Poller.waitUntil(tested.hasClass("someotherclaSSSSS"), is(true), now());
152     }
153 
154     private WebDriverLocatable singleTestLocatable()
155     {
156         return WebDriverLocators.single(By.id("test"));
157     }
158 
159     private WebElement newMockElement()
160     {
161         return mock(WebElement.class);
162     }
163 }