001/* 002 * Copyright 2005-2013 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package edu.samplu.krad.compview; 017 018import com.thoughtworks.selenium.SeleneseTestBase; 019import edu.samplu.common.Failable; 020import edu.samplu.common.ITUtil; 021import edu.samplu.common.WebDriverLegacyITBase; 022import org.openqa.selenium.By; 023 024import java.util.Arrays; 025import java.util.Collections; 026import java.util.List; 027 028/** 029 * @author Kuali Rice Team (rice.collab@kuali.org) 030 */ 031public abstract class BreadcrumbSmokeTestBase extends WebDriverLegacyITBase { 032 033 /** 034 * /kr-krad/uicomponents?viewId=UifCompView&methodToCall=start&pageId=UifCompView-Page3 035 */ 036 public static final String BOOKMARK_URL = "/kr-krad/uicomponents?viewId=UifCompView&methodToCall=start&pageId=UifCompView-Page1"; 037 038 /** 039 * //label[contains(text(), 'Navigate to')] 040 */ 041 public static final String NAVIGATE_TO_LABEL_XPATH = "//label[contains(text(), 'Navigate to')]"; 042 043 /** 044 * //*[@class='uif-optionList'] 045 */ 046 public static final String SECOND_BREADCRUMB_NAV_XPATH = "//*[@class='uif-optionList']"; 047 048 /** 049 * //*[@id='Uif-BreadcrumbWrapper']/ol/li[2]/a 050 */ 051 public static final String SECOND_DOWN_TRIANGLE_XPATH = "(//a[@class='uif-breadcrumbSiblingLink'])"; 052 053 /** 054 * Nav tests start at {@link edu.samplu.common.ITUtil#PORTAL}. Bookmark Tests should override and return {@link BreadcrumbSmokeTestBase#BOOKMARK_URL} 055 * {@inheritDoc} 056 * @return 057 */ 058 059 String[][] selectAsserts = {{"UifCompView", "Uif Components"}, 060 {"ConfigurationTestView", "Configuration Test View"}, 061 {"RichMessagesView", "Rich Messages"}, 062 {"Demo-ReadOnlyTestView", "ReadOnly Test"}, 063 {"ClientDisableView", "Client-side Disable"}}; 064 065 int[] breadcrumbOrderIndexes = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1}; 066 067 @Override 068 public String getTestUrl() { 069 return ITUtil.PORTAL; 070 } 071 072 protected void navigation() throws Exception { 073 waitAndClickKRAD(); 074 waitAndClickByXpath(KITCHEN_SINK_XPATH); 075 switchToWindow(KUALI_UIF_COMPONENTS_WINDOW_XPATH); 076 } 077 078 protected void testBreadcrumbBookmark(Failable failable) throws Exception { 079 testBreadcrumbs(); 080 passed(); 081 } 082 083 protected void testBreadcrumbShuffledBookmark(Failable failable) throws Exception { 084 testBreadcrumbsShuffled(); 085 passed(); 086 } 087 088 protected void testBreadcrumbShuffledNav(Failable failable) throws Exception { 089 navigation(); 090 testBreadcrumbsShuffled(); 091 passed(); 092 } 093 094 protected void testBreadcrumbNav(Failable failable) throws Exception { 095 navigation(); 096 testBreadcrumbs(); 097 passed(); 098 } 099 100 protected void testBreadcrumbNavigateToBookmark(Failable failable) throws Exception { 101 testBreadcrumbNavigateTo(); 102 passed(); 103 } 104 105 protected void testBreadcrumbNavigateToShuffledBookmark(Failable failable) throws Exception { 106 testBreadcrumbNavigateToShuffled(); 107 passed(); 108 } 109 110 protected void testBreadcrumbNavigateToNav(Failable failable) throws Exception { 111 navigation(); 112 testBreadcrumbNavigateTo(); 113 passed(); 114 } 115 116 protected void testBreadcrumbNavigateToShuffledNav(Failable failable) throws Exception { 117 navigation(); 118 testBreadcrumbNavigateToShuffled(); 119 passed(); 120 } 121 122 protected void testBreadcrumb(int pageNumber) throws Exception { 123 // <ul id="u13_control" class="uif-optionList" data-control_for="u13" tabindex="0"><li class="uif-optionList-item uif-optionList-selectedItem"><a href="http://env1.rice.kuali.org/kr-krad/uicomponents?methodToCall=start&pageId=UifCompView-Page1&viewId=UifCompView" data-key="UifCompView-Page1"> 124 // Input Fields and Controls 125 // </a></li> 126 // <li class="uif-optionList-item"><a href="http://env1.rice.kuali.org/kr-krad/uicomponents?methodToCall=start&pageId=UifCompView-Page2&viewId=UifCompView" data-key="UifCompView-Page2"> 127 // Other Fields 128 // </a></li> 129 // etc. 130 SeleneseTestBase.assertFalse(isVisibleByXpath(SECOND_BREADCRUMB_NAV_XPATH)); 131 // The second ▼ 132 waitAndClickByXpath(SECOND_DOWN_TRIANGLE_XPATH); 133 SeleneseTestBase.assertTrue(isVisibleByXpath(SECOND_BREADCRUMB_NAV_XPATH)); 134 waitAndClickByXpath(SECOND_DOWN_TRIANGLE_XPATH); 135 SeleneseTestBase.assertFalse(isVisibleByXpath(SECOND_BREADCRUMB_NAV_XPATH)); 136 waitAndClickByXpath(SECOND_DOWN_TRIANGLE_XPATH); 137 138 // The Second selection of the second ▼ 139 // you can't just click by link text as the same clickable text is on the left navigation. 140 waitAndClickByXpath(SECOND_BREADCRUMB_NAV_XPATH +"/li[" + pageNumber + "]/a"); 141 waitForElementPresentById("TopLink" + pageNumber); // bottom jump to top link 142 driver.getCurrentUrl().contains("pageId=UifCompView-Page" + pageNumber); 143 } 144 145 protected void testBreadcrumbs() throws Exception { 146 for (int i = 0, s = breadcrumbOrderIndexes.length; i < s; i++) { 147 testBreadcrumb(breadcrumbOrderIndexes[i]); 148 } 149 } 150 151 protected void testBreadcrumbsShuffled() throws Exception { 152 int[] copiedBreadcrumbOrderIndex = Arrays.copyOf(breadcrumbOrderIndexes, breadcrumbOrderIndexes.length); 153 154 Collections.shuffle(Arrays.asList(copiedBreadcrumbOrderIndex)); 155 for (int i = 0, s = copiedBreadcrumbOrderIndex.length; i < s; i++) { 156 testBreadcrumb(copiedBreadcrumbOrderIndex[i]); 157 } 158 } 159 160 protected void testBreadcrumbNavigateToShuffled() throws Exception { 161 testBreadcrumbNavigateToSetup(); 162 163 Collections.shuffle(Arrays.asList(selectAsserts)); 164 for (int i = 0, s = selectAsserts.length; i < s; i++) { 165 selectAndAssertNavigationTo(selectAsserts[i]); 166 } 167 } 168 169 protected void testBreadcrumbNavigateTo() throws Exception { 170 testBreadcrumbNavigateToSetup(); 171 172 // Not in a loop here so failures are easier to track 173 selectAndAssertNavigationTo(selectAsserts[1][0], selectAsserts[1][1]); 174 selectAndAssertNavigationTo(selectAsserts[2][0], selectAsserts[2][1]); 175 selectAndAssertNavigationTo(selectAsserts[3][0], selectAsserts[3][1]); 176 selectAndAssertNavigationTo(selectAsserts[4][0], selectAsserts[4][1]); 177 selectAndAssertNavigationTo(selectAsserts[0][0], selectAsserts[0][1]); 178 } 179 180 protected void testBreadcrumbNavigateToSetup() throws InterruptedException { 181 selectTopFrame(); 182 183 // div id="Uif-BreadcrumbWrapper" class="uif-sticky" data-sticky="true" style="position:fixed; left: 0; top: 39.55000305175781px;"> 184 waitForElementPresentById("Uif-BreadcrumbWrapper"); 185 186 // <span data-role="breadcrumb" id="u12">Input Fields and Controls</span> 187 waitForElementPresentById("u12"); 188 SeleneseTestBase.assertEquals("Input Fields and Controls", getTextById("u12")); 189 190 // <label id="u6610_label" for="u6610_control" data-label_for="u6610"> 191 // Navigate to: 192 // </label> 193 SeleneseTestBase.assertFalse(isVisibleByXpath(NAVIGATE_TO_LABEL_XPATH)); 194 // the first ▼ 195 waitAndClickByLinkText("▼"); 196 SeleneseTestBase.assertTrue(isVisibleByXpath(NAVIGATE_TO_LABEL_XPATH)); 197 SeleneseTestBase.assertEquals("Navigate to:",getTextByXpath(NAVIGATE_TO_LABEL_XPATH)); 198 // the first ▼ 199 waitAndClickByLinkText("▼"); 200 SeleneseTestBase.assertFalse(isVisibleByXpath(NAVIGATE_TO_LABEL_XPATH)); 201 } 202 203 protected void selectAndAssertNavigationTo(String[] selectAssert) throws InterruptedException { 204 selectAndAssertNavigationTo(selectAssert[0], selectAssert[1]); 205 } 206 207 protected void selectAndAssertNavigationTo(String selectText, String assertText) throws InterruptedException { 208 if (isTextPresent("KRAD Labs")) { 209 this.fail("Should not be on KRAD Labs page, did back after Breadcrumb Navigate To work?"); 210 } 211 waitAndClickByLinkText("▼"); 212 selectOption(By.xpath("//select[@name='viewId']"), selectText); 213 checkForIncidentReport(); 214 waitForElementPresentByXpath("//span[@class='uif-headerText-span']"); 215 checkForIncidentReport(); 216 SeleneseTestBase.assertEquals(assertText, getText(By.xpath("//span[@class='uif-headerText-span']"))); 217 back(); 218 } 219}