1 package com.atlassian.webdriver.it.tests;
2
3 import com.atlassian.pageobjects.browser.Browser;
4 import com.atlassian.pageobjects.browser.IgnoreBrowser;
5 import com.atlassian.pageobjects.browser.RequireBrowser;
6 import com.atlassian.webdriver.it.AbstractSimpleServerTest;
7 import com.atlassian.webdriver.it.pageobjects.page.JavaScriptUtilsPage;
8 import com.atlassian.webdriver.utils.JavaScriptUtils;
9 import com.atlassian.webdriver.utils.MouseEvents;
10 import com.atlassian.webdriver.utils.element.WebDriverPoller;
11 import org.junit.Before;
12 import org.junit.Test;
13 import org.openqa.selenium.By;
14 import org.openqa.selenium.TimeoutException;
15 import org.openqa.selenium.WebDriver;
16 import org.openqa.selenium.WebElement;
17
18 import javax.inject.Inject;
19 import java.util.concurrent.TimeUnit;
20
21 import static com.atlassian.webdriver.utils.element.ElementConditions.isNotVisible;
22 import static com.atlassian.webdriver.utils.element.ElementConditions.isVisible;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertTrue;
25 import static org.junit.Assert.fail;
26
27 @IgnoreBrowser(Browser.HTMLUNIT_NOJS)
28 public class TestJavaScriptUtils extends AbstractSimpleServerTest
29 {
30
31 @Inject private WebDriverPoller poller;
32 @Inject private WebDriver driver;
33
34 @Before
35 public void init()
36 {
37 poller = poller.withDefaultTimeout(5, TimeUnit.SECONDS);
38 product.visit(JavaScriptUtilsPage.class);
39 driver = product.getTester().getDriver();
40
41 MouseEvents.hover(By.id("hover-sink"), driver);
42 JavaScriptUtils.execute("window.hideAll();", driver);
43 }
44
45
46
47
48 @Test
49 @IgnoreBrowser(value = {Browser.HTMLUNIT, Browser.IE}, reason = "CSS hovering on elements does not work.")
50 public void testCssHoverRespondsToMouseover()
51 {
52 WebElement hoveringDiv = driver.findElement(By.id("hovering-element"));
53 assertTrue(hoveringDiv.isDisplayed());
54 assertCssChidrenNotVisible();
55
56
57 MouseEvents.hover(hoveringDiv, driver);
58 assertCssChidrenVisible();
59 }
60
61 @Test
62 @IgnoreBrowser(Browser.IE)
63 public void testJQueryHoverRespondsToMouseover()
64 {
65 WebElement hoveringDiv = driver.findElement(By.id("hovering-jquery-element"));
66 assertTrue(hoveringDiv.isDisplayed());
67 assertJQueryChildrenNotVisible();
68
69
70 MouseEvents.hover(hoveringDiv, driver);
71 assertJQueryChildrenVisible();
72 }
73
74 @Test(expected = TimeoutException.class)
75 @RequireBrowser({Browser.HTMLUNIT, Browser.IE})
76 public void testCssHoverBreaksForSomeBrowsers()
77 {
78 WebElement hoveringDiv = driver.findElement(By.id("hovering-element"));
79 assertTrue(hoveringDiv.isDisplayed());
80 assertCssChidrenNotVisible();
81
82
83 MouseEvents.hover(hoveringDiv, driver);
84 assertCssChidrenVisible();
85 fail("HtmlUnit/IE CSS hovers are working now - check the browser used for this test");
86 }
87
88 @Test(expected = TimeoutException.class)
89 @RequireBrowser({Browser.IE})
90 public void testJQueryHoverBreaksForSomeBrowsers()
91 {
92 WebElement hoveringDiv = driver.findElement(By.id("hovering-element"));
93 assertTrue(hoveringDiv.isDisplayed());
94 assertJQueryChildrenNotVisible();
95
96
97 MouseEvents.hover(hoveringDiv, driver);
98 assertJQueryChildrenVisible();
99 fail("IE JQuery hover is working now");
100 }
101
102 @Test
103 public void testMouseEventMouseOut()
104 {
105 WebElement mouseoutDiv = driver.findElement(By.id("mouseout-jquery-element"));
106 assertTrue(mouseoutDiv.isDisplayed());
107
108 WebElement mouseoutContainer = driver.findElement(By.id("mouseout-container"));
109 assertEquals("no mouseout", mouseoutContainer.getText());
110
111 MouseEvents.mouseout(mouseoutDiv, driver);
112 assertEquals("mouseout", mouseoutContainer.getText());
113
114 }
115
116 private void assertCssChidrenNotVisible()
117 {
118 poller.waitUntil(isNotVisible(By.id("child-element-one")));
119 poller.waitUntil(isNotVisible(By.id("child-element-two")));
120 poller.waitUntil(isNotVisible(By.id("child-element-three")));
121 }
122
123 private void assertCssChidrenVisible()
124 {
125 poller.waitUntil(isVisible(By.id("child-element-one")));
126 poller.waitUntil(isVisible(By.id("child-element-two")));
127 poller.waitUntil(isVisible(By.id("child-element-three")));
128 }
129
130 private void assertJQueryChildrenNotVisible()
131 {
132 poller.waitUntil(isNotVisible(By.id("child-jquery-element-one")));
133 poller.waitUntil(isNotVisible(By.id("child-jquery-element-two")));
134 poller.waitUntil(isNotVisible(By.id("child-jquery-element-three")));
135 }
136
137 private void assertJQueryChildrenVisible()
138 {
139 poller.waitUntil(isVisible(By.id("child-jquery-element-one")));
140 poller.waitUntil(isVisible(By.id("child-jquery-element-two")));
141 poller.waitUntil(isVisible(By.id("child-jquery-element-three")));
142 }
143 }