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.AbstractFileBasedServerTest;
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.*;
24
25 @IgnoreBrowser(Browser.HTMLUNIT_NOJS)
26 public class TestJavaScriptUtils extends AbstractFileBasedServerTest
27 {
28
29 @Inject private WebDriverPoller poller;
30 @Inject private WebDriver driver;
31
32 @Before
33 public void init()
34 {
35 poller = poller.withDefaultTimeout(5, TimeUnit.SECONDS);
36 product.visit(JavaScriptUtilsPage.class);
37 driver = product.getTester().getDriver();
38
39 MouseEvents.hover(By.id("hover-sink"), driver);
40 JavaScriptUtils.execute("window.hideAll();", driver);
41 }
42
43
44
45
46 @Test
47 @IgnoreBrowser(value = {Browser.FIREFOX, Browser.HTMLUNIT}, reason = "CSS hovering on elements does not work.")
48 public void testCssHoverRespondsToMouseover()
49 {
50 WebElement hoveringDiv = driver.findElement(By.id("hovering-element"));
51 assertTrue(hoveringDiv.isDisplayed());
52 assertCssChidrenNotVisible();
53
54
55 MouseEvents.hover(hoveringDiv, driver);
56 assertCssChidrenVisible();
57 }
58
59 @Test
60 public void testJQueryHoverRespondsToMouseover()
61 {
62 WebElement hoveringDiv = driver.findElement(By.id("hovering-jquery-element"));
63 assertTrue(hoveringDiv.isDisplayed());
64 assertJQueryChildrenNotVisible();
65
66
67 MouseEvents.hover(hoveringDiv, driver);
68 assertJQueryChildrenVisible();
69 }
70
71 @Test(expected = TimeoutException.class)
72 @RequireBrowser(Browser.HTMLUNIT)
73 public void testCssHoverBreaksForHtmlUnit()
74 {
75 WebElement hoveringDiv = driver.findElement(By.id("hovering-element"));
76 assertTrue(hoveringDiv.isDisplayed());
77 assertCssChidrenNotVisible();
78
79
80 MouseEvents.hover(hoveringDiv, driver);
81 poller.waitUntil(isVisible(By.id("child-element-one")), 5, TimeUnit.SECONDS);
82 fail("HtmlUnit CSS hovers are working now");
83 }
84
85 @Test(expected = TimeoutException.class)
86 @RequireBrowser(Browser.FIREFOX)
87 public void testCssHoverBreaksForFirefox()
88 {
89 WebElement hoveringDiv = driver.findElement(By.id("hovering-element"));
90 assertTrue(hoveringDiv.isDisplayed());
91 assertCssChidrenNotVisible();
92
93
94 MouseEvents.hover(hoveringDiv, driver);
95 poller.waitUntil(isVisible(By.id("child-element-one")), 5, TimeUnit.SECONDS);
96 fail("Firefox CSS hovers are working now");
97 }
98
99 @Test
100 public void testMouseEventMouseOut()
101 {
102 WebElement mouseoutDiv = driver.findElement(By.id("mouseout-jquery-element"));
103 assertTrue(mouseoutDiv.isDisplayed());
104
105 WebElement mouseoutContainer = driver.findElement(By.id("mouseout-container"));
106 assertEquals("no mouseout", mouseoutContainer.getText());
107
108 MouseEvents.mouseout(mouseoutDiv, driver);
109 assertEquals("mouseout", mouseoutContainer.getText());
110
111 }
112
113 private void assertCssChidrenNotVisible()
114 {
115 poller.waitUntil(isNotVisible(By.id("child-element-one")));
116 poller.waitUntil(isNotVisible(By.id("child-element-two")));
117 poller.waitUntil(isNotVisible(By.id("child-element-three")));
118 }
119
120 private void assertCssChidrenVisible()
121 {
122 poller.waitUntil(isVisible(By.id("child-element-one")));
123 poller.waitUntil(isVisible(By.id("child-element-two")));
124 poller.waitUntil(isVisible(By.id("child-element-three")));
125 }
126
127 private void assertJQueryChildrenNotVisible()
128 {
129 poller.waitUntil(isNotVisible(By.id("child-jquery-element-one")));
130 poller.waitUntil(isNotVisible(By.id("child-jquery-element-two")));
131 poller.waitUntil(isNotVisible(By.id("child-jquery-element-three")));
132 }
133
134 private void assertJQueryChildrenVisible()
135 {
136 poller.waitUntil(isVisible(By.id("child-jquery-element-one")));
137 poller.waitUntil(isVisible(By.id("child-jquery-element-two")));
138 poller.waitUntil(isVisible(By.id("child-jquery-element-three")));
139 }
140
141 }