1   package com.atlassian.pageobjects.elements.test.pageobjects.component;
2   
3   import com.atlassian.pageobjects.PageBinder;
4   import com.atlassian.pageobjects.binder.Init;
5   import com.atlassian.pageobjects.components.ActivatedComponent;
6   import com.atlassian.pageobjects.elements.PageElement;
7   import com.atlassian.pageobjects.elements.ElementBy;
8   import com.atlassian.pageobjects.elements.query.Poller;
9   import com.atlassian.pageobjects.elements.test.pageobjects.page.ElementsPage;
10  import com.atlassian.webdriver.AtlassianWebDriver;
11  import org.openqa.selenium.By;
12  
13  import javax.inject.Inject;
14  
15  /**
16   * Represents the JQuery menu that is present on the jquery.html page. 
17   */
18  public class JQueryMenu implements ActivatedComponent<JQueryMenu>
19  {
20      @Inject
21      protected AtlassianWebDriver driver;
22  
23      @Inject
24      protected PageBinder pageBinder;
25  
26      @ElementBy(id="elements_link")
27      private PageElement elementsLink;
28  
29      @ElementBy(id="menu")
30      private PageElement rootElement;
31  
32      private PageElement triggerElement;
33      private PageElement viewElement;
34  
35      @Init
36      public void intialize()
37      {
38          triggerElement = rootElement.find(By.tagName("a"));
39          viewElement = rootElement.find(By.tagName("ul"));
40      }
41  
42  
43      public ElementsPage gotoElementsPage()
44      {
45          elementsLink.click();
46          return pageBinder.bind(ElementsPage.class);
47      }
48  
49  
50      public PageElement getTrigger()
51      {
52          return triggerElement;
53      }
54  
55      public PageElement getView()
56      {
57          return viewElement;
58      }
59  
60      public JQueryMenu open()
61      {
62          if(!isOpen())
63          {
64              getTrigger().click();
65              Poller.waitUntilTrue(getView().timed().isVisible());
66          }
67          return this;
68      }
69  
70      public JQueryMenu close()
71      {
72          if(isOpen())
73          {
74              getTrigger().click();
75              Poller.waitUntilFalse(getView().timed().isVisible());
76          }
77  
78          return this;
79      }
80  
81      public boolean isOpen()
82      {
83          return getView().isVisible();
84      }
85  }