View Javadoc
1   package com.atlassian.webdriver.refapp.component;
2   
3   import com.atlassian.pageobjects.Page;
4   import com.atlassian.pageobjects.PageBinder;
5   import com.atlassian.pageobjects.component.Header;
6   import com.atlassian.pageobjects.component.WebSudoBanner;
7   import com.atlassian.pageobjects.page.HomePage;
8   import com.atlassian.webdriver.AtlassianWebDriver;
9   import com.atlassian.webdriver.utils.Check;
10  import com.google.common.collect.Iterables;
11  import org.openqa.selenium.By;
12  import org.openqa.selenium.NoSuchElementException;
13  import org.openqa.selenium.WebElement;
14  
15  import javax.inject.Inject;
16  import java.util.List;
17  import java.util.Locale;
18  
19  /**
20   *
21   */
22  public class RefappHeader implements Header {
23      private static final By LOGIN = By.id("login");
24  
25      @Inject
26      protected AtlassianWebDriver driver;
27  
28      @Inject
29      protected PageBinder pageBinder;
30  
31      public boolean isAtActivityStreamsPage() {
32          final List<WebElement> activityStreamsLinks = driver.findElements(By.id("activityStreamsLink"));
33  
34          if (activityStreamsLinks.isEmpty() || activityStreamsLinks.size() > 1) {
35              return false;
36          }
37  
38          return "Activity Streams".equals(Iterables.getOnlyElement(activityStreamsLinks).getText());
39      }
40  
41      public boolean isLoggedIn() {
42          return driver.findElement(LOGIN).getText().equals("Logout");
43      }
44  
45      public boolean isAdmin() {
46          return loggedInFullNameContains("admin");
47      }
48  
49      public boolean isSysadmin() {
50          return loggedInFullNameContains("sysadmin");
51      }
52  
53      private boolean loggedInFullNameContains(String text) {
54          if (isLoggedIn()) {
55              final String userLowerCase = driver.findElement(By.id("user")).getText().toLowerCase(Locale.ENGLISH);
56              return userLowerCase.contains(text);
57          }
58          return false;
59      }
60  
61      public <M extends Page> M logout(Class<M> nextPage) {
62          if (isLoggedIn()) {
63              driver.findElement(LOGIN).click();
64          }
65          return HomePage.class.isAssignableFrom(nextPage) ? pageBinder.bind(nextPage) : pageBinder.navigateToAndBind(nextPage);
66      }
67  
68      @Override
69      public WebSudoBanner getWebSudoBanner() {
70          // TODO Auto-generated method stub
71          return new WebSudoBanner() {
72  
73              WebElement banner() {
74                  return driver.findElement(By.id("websudo-banner"));
75              }
76  
77              @Override
78              public boolean isShowing() {
79                  try {
80                      return banner().isDisplayed();
81                  } catch (NoSuchElementException nsee) {
82                      return false;
83                  }
84              }
85  
86              @Override
87              public String getMessage() {
88                  try {
89                      return banner().getText();
90                  } catch (NoSuchElementException nsee) {
91                      return null;
92                  }
93              }
94  
95              /**
96               * Drops the websudo privilege if the websudo banner is displayed otherwise just navigates
97               * to the next page.
98               * @param nextPage the page to navigate to after websudo privileges have been dropped.
99               * @return The nextPage pageObject
100              */
101             @Override
102             public <P extends Page> P dropWebSudo(Class<P> nextPage) {
103                 final By webSudoDropButton = By.id("websudo-drop");
104                 if (Check.elementExists(webSudoDropButton, driver)) {
105                     driver.findElement(webSudoDropButton).click();
106                     return HomePage.class.isAssignableFrom(nextPage) ? pageBinder.bind(nextPage) : pageBinder.navigateToAndBind(nextPage);
107                 } else {
108                     return pageBinder.navigateToAndBind(nextPage);
109                 }
110             }
111         };
112     }
113 }