1 package com.atlassian.webdriver.confluence.component.header;
2
3 import javax.inject.Inject;
4
5 import com.atlassian.pageobjects.Page;
6 import com.atlassian.pageobjects.PageBinder;
7 import com.atlassian.pageobjects.component.Header;
8 import com.atlassian.pageobjects.component.WebSudoBanner;
9 import com.atlassian.pageobjects.page.HomePage;
10 import com.atlassian.webdriver.AtlassianWebDriver;
11 import com.atlassian.webdriver.confluence.component.UserDiscoverable;
12 import com.atlassian.webdriver.confluence.component.menu.BrowseMenu;
13 import com.atlassian.webdriver.confluence.component.menu.ConfluenceUserMenu;
14
15 import org.apache.commons.lang.NotImplementedException;
16 import org.openqa.selenium.By;
17 import org.openqa.selenium.WebElement;
18 import org.openqa.selenium.support.FindBy;
19
20
21
22
23 public class ConfluenceHeader implements Header, UserDiscoverable
24 {
25
26 @Inject
27 AtlassianWebDriver driver;
28
29 @Inject
30 PageBinder pageBinder;
31
32 @FindBy(id = "header")
33 WebElement headerElement;
34
35 private final static By USER_MENU_LOCATOR = By.id("user-menu-link");
36 private final static By ADMIN_MENU_LOCATOR = By.id("administration-link");
37
38
39 public boolean isLoggedIn()
40 {
41 return driver.elementExistsAt(USER_MENU_LOCATOR, headerElement);
42 }
43
44 public <M extends Page> M logout(Class<M> nextPage)
45 {
46 if (isLoggedIn()) {
47 getUserMenu().open().logout();
48 }
49 return HomePage.class.isAssignableFrom(nextPage) ? pageBinder.bind(nextPage) : pageBinder.navigateToAndBind(nextPage);
50 }
51
52 public WebSudoBanner getWebSudoBanner()
53 {
54 return pageBinder.bind(WebSudoBanner.class);
55 }
56
57 public boolean isAdmin()
58 {
59 return driver.elementExistsAt(ADMIN_MENU_LOCATOR, headerElement);
60 }
61
62 public ConfluenceUserMenu getUserMenu()
63 {
64 if (isLoggedIn())
65 {
66 return pageBinder.bind(ConfluenceUserMenu.class);
67 }
68 else
69 {
70 throw new RuntimeException("Tried to get the user menu but the user is not logged in.");
71 }
72 }
73
74 public BrowseMenu getBrowseMenu()
75 {
76 return pageBinder.bind(BrowseMenu.class);
77 }
78 }