View Javadoc

1   package com.atlassian.pageobjects.elements.test;
2   
3   import com.atlassian.pageobjects.browser.Browser;
4   import com.atlassian.pageobjects.elements.GlobalElementFinder;
5   import com.atlassian.pageobjects.elements.Options;
6   import com.atlassian.pageobjects.elements.PageElement;
7   import com.atlassian.pageobjects.elements.PageElementFinder;
8   import com.atlassian.pageobjects.elements.SelectElement;
9   import com.atlassian.pageobjects.elements.query.Poller;
10  import com.atlassian.pageobjects.elements.query.TimedQuery;
11  import com.atlassian.pageobjects.elements.test.pageobjects.page.ElementsPage;
12  import com.atlassian.webdriver.testing.annotation.IgnoreBrowser;
13  import org.hamcrest.Matchers;
14  import org.junit.Before;
15  import org.junit.Test;
16  import org.openqa.selenium.By;
17  
18  import static org.junit.Assert.assertEquals;
19  import static org.junit.Assert.assertFalse;
20  import static org.junit.Assert.assertNotNull;
21  import static org.junit.Assert.assertSame;
22  import static org.junit.Assert.assertThat;
23  import static org.junit.Assert.assertTrue;
24  
25  /**
26   * Test {@link com.atlassian.pageobjects.elements.PageElementJavascript} execute script methods.
27   *
28   * @since 2.1
29   */
30  @IgnoreBrowser(Browser.HTMLUNIT_NOJS)
31  public class TestPageElementJavaScript extends AbstractFileBasedServerTest
32  {
33  
34      private PageElementFinder elementFinder;
35  
36      @Before
37      public void init()
38      {
39          product.visit(ElementsPage.class);
40          elementFinder = product.getPageBinder().bind(GlobalElementFinder.class);
41      }
42  
43      @Test
44      public void shouldExecuteSimpleJavascript()
45      {
46          final PageElement delayedDiv = elementFinder.find(By.id("test1_delayedDiv"));
47          final Object delayedDivPresent = delayedDiv.javascript().execute("return $(arguments[0]).length > 0");
48          assertNotNull(delayedDivPresent);
49          assertTrue(delayedDivPresent instanceof Boolean);
50          assertTrue((Boolean) delayedDivPresent);
51      }
52  
53      @Test
54      public void shouldExecuteTimedScript()
55      {
56          final PageElement delayedDiv = elementFinder.find(By.id("test1_delayedDiv"));
57          TimedQuery<Boolean> delayedSpanPresent = delayedDiv.javascript().executeTimed(Boolean.class,
58                  "return $(arguments[0]).find('#test1_delayedSpan').length > 0");
59          assertFalse(delayedSpanPresent.now());
60          elementFinder.find(By.id("test1_addElementsButton")).click();
61          Poller.waitUntilTrue(delayedSpanPresent);
62      }
63  
64      @Test(expected = IllegalArgumentException.class)
65      public void executeTimedShouldNotAcceptPageElementAsResultType()
66      {
67          final PageElement delayedDiv = elementFinder.find(By.id("test1_delayedDiv"));
68          delayedDiv.javascript().executeTimed(PageElement.class, "return arguments[0]");
69      }
70  
71      @Test
72      public void shouldReturnSamePageElement()
73      {
74          final PageElement delayedDiv = elementFinder.find(By.id("test1_delayedDiv"));
75          Object result = delayedDiv.javascript().execute("return arguments[0]");
76          assertSame(delayedDiv, result);
77      }
78  
79      @Test
80      public void shouldReturnSamePageElementWithCast()
81      {
82          final PageElement delayedDiv = elementFinder.find(By.id("test1_delayedDiv"));
83          PageElement result = delayedDiv.javascript().execute(PageElement.class, "return arguments[0]");
84          assertSame(delayedDiv, result);
85      }
86  
87      @Test
88      public void shouldReturnNewPageElement()
89      {
90          final PageElement delayedDiv = elementFinder.find(By.id("test1_delayedDiv"));
91          Object result = delayedDiv.javascript().execute("return arguments[1]", elementFinder.find(By.id("test1_addElementsButton")));
92          assertTrue(result instanceof PageElement);
93          final PageElement element = (PageElement) result;
94          assertEquals("test1_addElementsButton", element.getAttribute("id"));
95      }
96  
97      @Test
98      public void shouldReturnSelectElement()
99      {
100         final PageElement delayedDiv = elementFinder.find(By.id("test1_delayedDiv"));
101         SelectElement awesomeSelect = delayedDiv.javascript().execute(SelectElement.class, "return arguments[1]", elementFinder.find(By.id("awesome-select")));
102         awesomeSelect.select(Options.value("volvo"));
103     }
104 
105     @Test
106     public void executeAsyncNonTypedShouldWorkForSimpleType()
107     {
108         final PageElement delayedDiv = elementFinder.find(By.id("test1_delayedDiv"));
109         Object result = delayedDiv.javascript().executeAsync("arguments[1](true)");
110         assertTrue(result instanceof Boolean);
111         assertEquals(Boolean.TRUE, result);
112     }
113 
114     @Test
115     @IgnoreBrowser(value = Browser.HTMLUNIT, reason = "http://code.google.com/p/selenium/issues/detail?id=4257")
116     public void executeAsyncNonTypedShouldWorkForPageElement()
117     {
118         final PageElement delayedDiv = elementFinder.find(By.id("test1_delayedDiv"));
119         Object result = delayedDiv.javascript().executeAsync("arguments[1](arguments[0])");
120         assertThat(result, Matchers.instanceOf(PageElement.class));
121         assertSame(delayedDiv, result);
122     }
123 
124     @Test
125     public void executeAsyncTypedShouldWorkForSimpleType()
126     {
127         final PageElement delayedDiv = elementFinder.find(By.id("test1_delayedDiv"));
128         String result = delayedDiv.javascript().executeAsync(String.class, "arguments[1]('woohoo')");
129         assertEquals("woohoo", result);
130     }
131 
132     @Test
133     @IgnoreBrowser(value = Browser.HTMLUNIT, reason = "http://code.google.com/p/selenium/issues/detail?id=4257")
134     public void executeAsyncTypedShouldWorkForPageElement()
135     {
136         final PageElement delayedDiv = elementFinder.find(By.id("test1_delayedDiv"));
137         PageElement result = delayedDiv.javascript().executeAsync(PageElement.class, "arguments[1](arguments[0])");
138         assertSame(delayedDiv, result);
139     }
140 
141     @Test
142     @IgnoreBrowser(value = Browser.HTMLUNIT, reason = "http://code.google.com/p/selenium/issues/detail?id=4257")
143     public void executeAsyncTypedShouldWorkForSelectElement()
144     {
145         final PageElement delayedDiv = elementFinder.find(By.id("test1_delayedDiv"));
146         SelectElement result = delayedDiv.javascript().executeAsync(SelectElement.class, "arguments[2](arguments[1])",
147                 elementFinder.find(By.id("awesome-select")));
148         assertEquals("awesome-select", result.getAttribute("id"));
149         result.select(Options.value("volvo"));
150     }
151 }