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
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 }