View Javadoc

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          // move away from any other tested element
39          MouseEvents.hover(By.id("hover-sink"), driver);
40          JavaScriptUtils.execute("window.hideAll();", driver);
41      }
42  
43      /**
44       * This test is testing that css psuedo class :hover will display an element
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          // now hover over div to show the children
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          // now hover over div to show the children
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          // now hover over div to show the children
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          // now hover over div to show the children
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 }