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