View Javadoc

1   package com.atlassian.webdriver.unittests.utils;
2   
3   import com.atlassian.webdriver.utils.Check;
4   import com.google.common.collect.ImmutableList;
5   import org.junit.After;
6   import org.junit.Before;
7   import org.junit.Test;
8   import org.mockito.Mock;
9   import org.mockito.MockitoAnnotations;
10  import org.openqa.selenium.By;
11  import org.openqa.selenium.NoSuchElementException;
12  import org.openqa.selenium.SearchContext;
13  import org.openqa.selenium.WebElement;
14  
15  import static org.mockito.Matchers.any;
16  import static org.mockito.Mockito.reset;
17  import static org.mockito.Mockito.when;
18  
19  import static org.junit.Assert.*;
20  
21  /**
22   * @since 2.1.0
23   */
24  public class TestCheck
25  {
26      @Mock WebElement displayedWebElement;
27      @Mock WebElement nonDisplayedWebElement;
28      @Mock SearchContext singleElementSearchContext;
29      @Mock SearchContext noElementsInSearchContext;
30      @Mock SearchContext multiElementsSearchContext;
31  
32      @Before
33      public void setupMocks()
34      {
35          MockitoAnnotations.initMocks(this);
36          when(displayedWebElement.isDisplayed()).thenReturn(true);
37          when(nonDisplayedWebElement.isDisplayed()).thenReturn(false);
38          when(singleElementSearchContext.findElement(any(By.class))).thenReturn(displayedWebElement);
39          when(noElementsInSearchContext.findElement(any(By.class))).thenThrow(new NoSuchElementException("Element does not exists in page"));
40          when(noElementsInSearchContext.findElements(any(By.class))).thenReturn(ImmutableList.<WebElement>of());
41      }
42  
43      @After
44      public void resetMocks()
45      {
46          reset(displayedWebElement,nonDisplayedWebElement,singleElementSearchContext,
47                  noElementsInSearchContext,multiElementsSearchContext);
48      }
49  
50      @Test
51      public void testCheckElementExists()
52      {
53          assertTrue(Check.elementExists(By.id("test"), singleElementSearchContext));
54      }
55  
56      @Test
57      public void testCheckElementsNotExists()
58      {
59          assertFalse(Check.elementExists(By.id("test"), noElementsInSearchContext));
60      }
61  
62      @Test
63      public void testCheckElementIsVisible()
64      {
65          assertTrue(Check.elementIsVisible(By.id("test"), singleElementSearchContext));
66      }
67  
68      @Test
69      public void testCheckElementsAreVisble()
70      {
71          when(multiElementsSearchContext.findElements(any(By.class)))
72                  .thenReturn(ImmutableList.<WebElement>of(displayedWebElement, displayedWebElement));
73          assertTrue(Check.elementsAreVisible(By.id("test"), multiElementsSearchContext));
74      }
75  
76      @Test
77      public void testCheckNoElementsFoundAreNotVisible()
78      {
79          assertFalse(Check.elementsAreVisible(By.id("test"), noElementsInSearchContext));
80      }
81  
82      @Test
83      public void testCheckElementsWithDifferentDisplaysAreNotVisible()
84      {
85          when(multiElementsSearchContext.findElements(any(By.class)))
86              .thenReturn(ImmutableList.<WebElement>of(displayedWebElement, nonDisplayedWebElement));
87          assertFalse(Check.elementsAreVisible(By.id("test"), multiElementsSearchContext));
88      }
89  
90      @Test
91      public void testHasClassOnSingleClassName()
92      {
93          when(displayedWebElement.getAttribute("class")).thenReturn("test-class");
94          assertTrue(Check.hasClass("test-class", displayedWebElement));
95      }
96  
97      @Test
98      public void testHasClassWithMultipleClassNames()
99      {
100         when(displayedWebElement.getAttribute("class")).thenReturn("class-a test-class class-b");
101         assertTrue(Check.hasClass("class-a", displayedWebElement));
102         assertTrue(Check.hasClass("test-class", displayedWebElement));
103         assertTrue(Check.hasClass("class-b", displayedWebElement));
104     }
105 
106     @Test
107     public void testNoClassFound()
108     {
109         when(displayedWebElement.getAttribute("class")).thenReturn("");
110         assertFalse(Check.hasClass("test-class", displayedWebElement));
111     }
112 
113     @Test
114     public void testClassIsNullIsFalse()
115     {
116         when(displayedWebElement.getAttribute("class")).thenReturn(null);
117         assertFalse(Check.hasClass("test-class", displayedWebElement));
118     }
119 
120     @Test
121     public void testCaseInsestiveMatchesAreValid()
122     {
123         when(displayedWebElement.getAttribute("class")).thenReturn("TEST-CLASS");
124         assertTrue(Check.hasClass("test-class", displayedWebElement));
125     }
126 
127     @Test
128     public void testOverlappedClassNameDoesNotMatch()
129     {
130         when(displayedWebElement.getAttribute("class")).thenReturn("test-class-a");
131         assertFalse(Check.hasClass("test-class", displayedWebElement));
132     }
133 
134     @Test
135     public void testMultiOverlappedClassNameDoesNotMatch()
136     {
137         when(displayedWebElement.getAttribute("class")).thenReturn("test-class-a test-class-b test-test-class");
138         assertFalse(Check.hasClass("test-class", displayedWebElement));
139     }
140 
141     @Test
142     public void testMultiClassesWithNoMatch()
143     {
144         when(displayedWebElement.getAttribute("class")).thenReturn("test-a test-b test-c");
145         assertFalse(Check.hasClass("test-class", displayedWebElement));
146     }
147 
148 
149 }