001 /** 002 * Copyright 2005-2012 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 */ 016 package edu.samplu.common; 017 018 import org.junit.After; 019 import org.junit.Assert; 020 import org.junit.Before; 021 import org.junit.BeforeClass; 022 import org.junit.Rule; 023 import org.junit.rules.TestName; 024 import org.openqa.selenium.By; 025 import org.openqa.selenium.JavascriptExecutor; 026 import org.openqa.selenium.NoSuchFrameException; 027 import org.openqa.selenium.WebDriver; 028 import org.openqa.selenium.WebElement; 029 import org.openqa.selenium.chrome.ChromeDriverService; 030 import org.openqa.selenium.interactions.Actions; 031 import org.openqa.selenium.remote.RemoteWebDriver; 032 033 import java.io.BufferedReader; 034 import java.io.InputStreamReader; 035 import java.net.HttpURLConnection; 036 import java.net.URL; 037 import java.util.List; 038 import java.util.Set; 039 import java.util.concurrent.TimeUnit; 040 041 import static com.thoughtworks.selenium.SeleneseTestBase.fail; 042 import static org.junit.Assert.assertEquals; 043 044 /** 045 * Class to upgrade UpgradedSeleniumITBase tests to WebDriver. 046 * @deprecated Use WebDriverITBase for new tests. 047 * @author Kuali Rice Team (rice.collab@kuali.org) 048 */ 049 public abstract class WebDriverLegacyITBase { //implements com.saucelabs.common.SauceOnDemandSessionIdProvider { 050 051 public static final int DEFAULT_WAIT_SEC = 60; 052 public static final String REMOTE_PUBLIC_USERPOOL_PROPERTY = "remote.public.userpool"; 053 public static final String REMOTE_PUBLIC_USER_PROPERTY = "remote.public.user"; 054 055 public abstract String getTestUrl(); 056 057 protected WebDriver driver; 058 protected String user = "admin"; 059 protected boolean passed = false; 060 static ChromeDriverService chromeDriverService; 061 062 public @Rule TestName testName= new TestName(); 063 064 String sessionId = null; 065 066 public String getSessionId() { 067 return sessionId; 068 } 069 070 @BeforeClass 071 public static void createAndStartService() throws Exception { 072 chromeDriverService = WebDriverUtil.createAndStartService(); 073 if (chromeDriverService != null) chromeDriverService.start(); 074 } 075 076 /** 077 * Setup the WebDriver test, login and load the tested web page 078 * 079 * @throws Exception 080 */ 081 @Before 082 public void setUp() throws Exception { 083 // {"test":"1","user":"1"} 084 try { 085 if (System.getProperty(REMOTE_PUBLIC_USER_PROPERTY) != null) { 086 user = System.getProperty(REMOTE_PUBLIC_USER_PROPERTY); 087 } else if (System.getProperty(REMOTE_PUBLIC_USERPOOL_PROPERTY) != null) { // deprecated 088 String userResponse = getHTML(ITUtil.prettyHttp(System.getProperty(REMOTE_PUBLIC_USERPOOL_PROPERTY) + "?test=" + this.toString().trim())); 089 user = userResponse.substring(userResponse.lastIndexOf(":" ) + 2, userResponse.lastIndexOf("\"")); 090 } 091 driver = WebDriverUtil.setUp(getUserName(), ITUtil.getBaseUrlString() + getTestUrl(), getClass().getSimpleName(), testName); 092 this.sessionId = ((RemoteWebDriver)driver).getSessionId().toString(); 093 } catch (Exception e) { 094 fail("Exception in setUp " + e.getMessage()); 095 e.printStackTrace(); 096 } 097 ITUtil.login(driver, user); 098 } 099 100 @After 101 public void tearDown() throws Exception { 102 try { 103 // if (System.getProperty(SauceLabsWebDriverHelper.SAUCE_PROPERTY) != null) { 104 // SauceLabsWebDriverHelper.tearDown(passed, sessionId, System.getProperty(SauceLabsWebDriverHelper.SAUCE_USER_PROPERTY), System.getProperty(SauceLabsWebDriverHelper.SAUCE_KEY_PROPERTY)); 105 // } 106 if (System.getProperty(REMOTE_PUBLIC_USERPOOL_PROPERTY) != null) { 107 getHTML(ITUtil.prettyHttp(System.getProperty(REMOTE_PUBLIC_USERPOOL_PROPERTY) + "?test=" + this.toString() + "&user=" + user)); 108 } 109 } catch (Exception e) { 110 System.out.println("Exception in tearDown " + e.getMessage()); 111 e.printStackTrace(); 112 } finally { 113 if (driver != null) { 114 if (ITUtil.dontTearDownPropertyNotSet()) { 115 driver.close(); 116 driver.quit(); 117 } 118 } else { 119 System.out.println("WebDriver is null, if using saucelabs, has sauceleabs been uncommented in WebDriverUtil.java? If using a remote hub did you include the port?"); 120 } 121 } 122 } 123 124 protected String getHTML(String urlToRead) { 125 URL url; 126 HttpURLConnection conn; 127 BufferedReader rd; 128 String line; 129 String result = ""; 130 try { 131 url = new URL(urlToRead); 132 conn = (HttpURLConnection) url.openConnection(); 133 conn.setRequestMethod("GET"); 134 rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 135 while ((line = rd.readLine()) != null) { 136 result += line; 137 } 138 rd.close(); 139 } catch (Exception e) { 140 e.printStackTrace(); 141 } 142 return result; 143 } 144 145 protected void passed() { 146 passed = true; 147 } 148 149 protected void assertElementPresentByName(String name) { 150 driver.findElement(By.name(name)); 151 } 152 153 protected void assertElementPresentByName(String name,String message) { 154 try{ 155 driver.findElement(By.name(name)); 156 }catch(Exception e){ 157 Assert.fail(name+ " not present "+ message); 158 } 159 } 160 161 protected void assertElementPresentByXpath(String locator) { 162 driver.findElement(By.xpath(locator)); 163 } 164 165 protected void assertElementPresentByXpath(String locator,String message) { 166 try{ 167 driver.findElement(By.xpath(locator)); 168 }catch(Exception e){ 169 Assert.fail(locator+ " not present "+ message); 170 } 171 } 172 173 protected void assertElementPresent(String locator) { 174 driver.findElement(By.cssSelector(locator)); 175 } 176 177 protected void assertTextPresent(String text) { 178 assertTextPresent(text, ""); 179 } 180 181 protected void assertTextPresent(String text, String message) { 182 if (!driver.getPageSource().contains(text)) { 183 Assert.fail(text + " not present " + message); 184 } 185 } 186 187 protected void blanketApproveTest() throws InterruptedException { 188 ITUtil.checkForIncidentReport(driver.getPageSource(), "methodToCall.blanketApprove", ""); 189 waitAndClickByName("methodToCall.blanketApprove", "No blanket approve button does the user " + getUserName() + " have permission?"); 190 Thread.sleep(2000); 191 192 if (driver.findElements(By.xpath(ITUtil.DIV_ERROR_LOCATOR)).size()>0) { 193 String errorText = driver.findElement(By.xpath(ITUtil.DIV_ERROR_LOCATOR)).getText(); 194 if (errorText != null && errorText.contains("error(s) found on page.")) { 195 errorText = ITUtil.blanketApprovalCleanUpErrorText(errorText); 196 if (driver.findElements(By.xpath(ITUtil.DIV_EXCOL_LOCATOR)).size()>0) { // not present if errors are at the bottom of the page (see left-errmsg below) 197 errorText = ITUtil.blanketApprovalCleanUpErrorText(driver.findElement(By.xpath(ITUtil.DIV_EXCOL_LOCATOR)).getText()); // replacing errorText as DIV_EXCOL_LOCATOR includes the error count 198 } 199 200 // if (selenium.isElementPresent("//div[@class='left-errmsg']/div")) { 201 // errorText = errorText + " " + selenium.getText("//div[@class='left-errmsg']/div/div[1]"); 202 // } 203 Assert.fail(errorText); 204 } 205 } 206 ITUtil.checkForIncidentReport(driver.getPageSource(), "//img[@alt='doc search']", "Blanket Approve failure"); 207 waitAndClickByXpath("//img[@alt='doc search']"); 208 assertEquals("Kuali Portal Index", driver.getTitle()); 209 selectFrame("iframeportlet"); 210 waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']"); 211 } 212 213 protected void checkForIncidentReport() { 214 checkForIncidentReport("", ""); 215 } 216 217 protected void checkForIncidentReport(String locator) { 218 checkForIncidentReport(locator, ""); 219 } 220 221 protected void checkForIncidentReport(String locator, String message) { 222 WebDriverUtil.checkForIncidentReport(driver, locator, message); 223 } 224 225 protected void clearText(By by) throws InterruptedException { 226 driver.findElement(by).clear(); 227 } 228 229 protected void clearTextByName(String name) throws InterruptedException { 230 clearText(By.name(name)); 231 } 232 233 protected void clearTextByXpath(String locator) throws InterruptedException { 234 clearText(By.xpath(locator)); 235 } 236 237 protected String getAttribute(By by, String attribute) throws InterruptedException { 238 waitFor(by); 239 return driver.findElement(by).getAttribute(attribute); 240 } 241 242 /** 243 * Get value of any attribute by using element name 244 * 245 *@param name name of an element 246 *@param attribute the name of an attribute whose value is to be retrieved 247 */ 248 protected String getAttributeByName(String name,String attribute) throws InterruptedException { 249 return getAttribute(By.name(name),attribute); 250 } 251 252 /** 253 * Get value of any attribute by using element xpath 254 * 255 *@param locator locating mechanism of an element 256 *@param attribute the name of an attribute whose value is to be retrieved 257 */ 258 protected String getAttributeByXpath(String locator,String attribute) throws InterruptedException { 259 return getAttribute(By.xpath(locator),attribute); 260 } 261 262 protected String getBaseUrlString() { 263 return ITUtil.getBaseUrlString(); 264 } 265 266 protected String getText(By by) throws InterruptedException { 267 return driver.findElement(by).getText(); 268 } 269 270 protected String getTextByName(String name) throws InterruptedException { 271 return getText(By.name(name)); 272 } 273 274 protected String getText(String locator) throws InterruptedException { 275 return getText(By.cssSelector(locator)); 276 } 277 278 protected String getTextByXpath(String locator) throws InterruptedException { 279 return getText(By.xpath(locator)); 280 } 281 282 protected String getTitle() { 283 return driver.getTitle(); 284 } 285 286 /** 287 * Override in test to define a user other than admin 288 * @return 289 */ 290 public String getUserName() { 291 return user; 292 } 293 294 protected boolean isElementPresent(By by) { 295 return (driver.findElements(by)).size()>0; 296 } 297 298 protected boolean isElementPresent(String locator) { 299 return (driver.findElements(By.cssSelector(locator))).size()>0; 300 } 301 302 protected boolean isElementPresentByName(String name) { 303 return isElementPresent(By.name(name)); 304 } 305 306 protected boolean isElementPresentByXpath(String locator) { 307 return isElementPresent(By.xpath(locator)); 308 } 309 310 protected void open(String url) { 311 driver.get(url); 312 } 313 314 protected void selectFrame(String locator) { 315 try { 316 driver.switchTo().frame(locator); 317 } catch (NoSuchFrameException nsfe) { 318 // don't fail 319 } 320 } 321 322 protected void selectTopFrame() { 323 driver.switchTo().defaultContent(); 324 } 325 326 protected void selectWindow(String locator) { 327 driver.switchTo().window(locator); 328 } 329 330 protected void testCancelConfirmation() throws InterruptedException { 331 waitAndCancelConfirmation(); 332 passed(); 333 } 334 335 protected void testCreateNewSearchReturnValueCancelConfirmation() throws InterruptedException, Exception { 336 selectFrame("iframeportlet"); 337 waitAndCreateNew(); 338 waitAndSearch(); 339 waitAndReturnValue(); 340 waitAndCancelConfirmation(); 341 passed(); 342 } 343 344 protected void testSearchEditCancel() throws InterruptedException { 345 selectFrame("iframeportlet"); 346 waitAndSearch(); 347 waitAndEdit(); 348 testCancelConfirmation(); 349 } 350 351 protected void testVerifyAddDeleteFiscalOfficerLegacy() throws Exception { 352 selectFrame("iframeportlet"); 353 waitAndTypeByName("document.documentHeader.documentDescription", ITUtil.DTS_TWO); 354 waitAndTypeByName("newCollectionLines['document.newMaintainableObject.dataObject.fiscalOfficer.accounts'].number", "1234567890"); 355 waitAndTypeByName("newCollectionLines['document.newMaintainableObject.dataObject.fiscalOfficer.accounts'].foId", "2"); 356 357 waitAndClickByXpath("//button[@data-loadingmessage='Adding Line...']"); 358 359 assertElementPresentByName("document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].number", "https://jira.kuali.org/browse/KULRICE-8564"); 360 361 assertEquals("1234567890", getAttributeByName("document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].number","value")); 362 assertEquals("2", getAttributeByName("document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].foId","value")); 363 364 waitAndClickByXpath("//button[@data-loadingmessage='Deleting Line...']"); 365 366 assertElementPresentByName("document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].number"); 367 passed(); 368 } 369 370 protected void waitAndCancelConfirmation() throws InterruptedException { 371 waitAndClickByName("methodToCall.cancel"); 372 waitAndClickByName("methodToCall.processAnswer.button0"); 373 } 374 375 protected void waitAndCreateNew() throws InterruptedException { 376 waitAndClickByXpath("//img[@alt='create new']"); 377 // waitAndClickByXpath("//a[@title='Create a new record']"); 378 } 379 380 protected void waitAndEdit() throws InterruptedException { 381 waitAndClickByLinkText("edit"); 382 } 383 384 protected void waitAndReturnValue() throws InterruptedException { 385 waitAndClickByLinkText("return value"); 386 } 387 388 protected void waitAndSearch() throws InterruptedException { 389 waitAndClickByXpath("//input[@value='search']"); 390 // waitAndClickByXpath("//input[@name='methodToCall.search']"); 391 // waitAndClick("input[alt='search']"); 392 // waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']"); 393 } 394 395 protected String waitForDocId() throws InterruptedException { 396 waitForElementPresentByXpath("//div[@id='headerarea']/div/table/tbody/tr[1]/td[1]"); 397 return driver.findElement(By.xpath("//div[@id='headerarea']/div/table/tbody/tr[1]/td[1]")).getText(); 398 } 399 400 protected void waitForElementPresent(String locator) throws InterruptedException { 401 waitFor(By.cssSelector(locator)); 402 } 403 404 protected void waitForElementPresentByXpath(String locator) throws InterruptedException { 405 waitFor(By.xpath(locator)); 406 } 407 408 protected void waitForElementPresentByName(String name) throws InterruptedException { 409 waitFor(By.name(name)); 410 } 411 412 protected void waitForTitleToEqualKualiPortalIndex() throws InterruptedException { 413 waitForTitleToEqualKualiPortalIndex(""); 414 } 415 416 protected void waitForTitleToEqualKualiPortalIndex(String message) throws InterruptedException { 417 Thread.sleep(2000); 418 // This started failing in CI.... 419 // boolean failed = false; 420 // for (int second = 0;; second++) { 421 // Thread.sleep(1000); 422 // if (second >= 60) failed = true; 423 // try { if (failed || ITUtil.KUALI_PORTAL_TITLE.equals(driver.getTitle())) break; } catch (Exception e) {} 424 // } 425 // WebDriverUtil.checkForIncidentReport(driver, message); // after timeout to be sure page is loaded 426 // if (failed) fail("timeout of " + 60 + " seconds " + message); 427 } 428 429 protected void waitAndClick(String locator) throws InterruptedException { 430 waitAndClick(locator, ""); 431 } 432 433 protected void waitForPageToLoad() { 434 // noop webdriver doesn't it need it, except when it does... 435 } 436 437 protected void waitFor(By by) throws InterruptedException { 438 waitFor(by, ""); 439 } 440 441 protected void waitFor(By by, String message) throws InterruptedException { 442 // for (int second = 0;; second++) { 443 Thread.sleep(1000); 444 driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 445 446 // if (second >= DEFAULT_WAIT_SEC) fail(by.toString() + " " + message + " " + DEFAULT_WAIT_SEC + " sec timeout."); 447 try { driver.findElement(by); 448 //break; 449 } catch (Exception e) {} 450 driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS); 451 // } 452 } 453 454 protected void waitAndClick(By by) throws InterruptedException { 455 waitAndClick(by, ""); 456 } 457 458 protected void waitAndClick(By by, String message) throws InterruptedException { 459 waitFor(by, message); 460 try { 461 (driver.findElement(by)).click(); 462 } catch (Exception e) { 463 fail(e.getMessage() + " " + by.toString() + " " + message + " " + driver.getCurrentUrl() ); 464 e.printStackTrace(); 465 } 466 } 467 468 protected void waitAndClick(String locator, String message) throws InterruptedException { 469 waitAndClick(By.cssSelector(locator), message); 470 } 471 472 protected void waitAndClickByLinkText(String text) throws InterruptedException { 473 waitAndClick(By.linkText(text),""); 474 } 475 476 protected void waitAndClickByLinkText(String text, String message) throws InterruptedException { 477 waitAndClick(By.linkText(text), message); 478 } 479 480 protected void waitAndClickByName(String name) throws InterruptedException { 481 waitAndClick(By.name(name), ""); 482 } 483 484 protected void waitAndClickByXpath(String xpath) throws InterruptedException { 485 waitAndClick(By.xpath(xpath)); 486 } 487 488 protected void waitAndClickByName(String name, String message) throws InterruptedException { 489 waitAndClick(By.name(name), message); 490 } 491 492 protected void waitAndClickByXpath(String xpath, String message) throws InterruptedException { 493 waitAndClick(By.xpath(xpath), message); 494 } 495 496 protected void waitAndType(By by, String text) throws InterruptedException { 497 waitFor(by, ""); 498 try { 499 (driver.findElement(by)).sendKeys(text); 500 } catch (Exception e) { 501 fail(e.getMessage() + " " + by.toString() + " " + text + " " + driver.getCurrentUrl()); 502 e.printStackTrace(); 503 } 504 } 505 506 protected void waitAndType(By by, String text, String message) throws InterruptedException { 507 waitFor(by, ""); 508 try { 509 (driver.findElement(by)).sendKeys(text); 510 } catch (Exception e) { 511 fail(e.getMessage() + " " + by.toString() + " " + text + " " + message + " " + driver.getCurrentUrl()); 512 e.printStackTrace(); 513 } 514 } 515 516 protected void waitAndTypeByXpath(String locator, String text) throws InterruptedException { 517 waitAndType(By.xpath(locator), text); 518 } 519 520 protected void waitAndTypeByXpath(String locator, String text, String message) throws InterruptedException { 521 waitAndType(By.xpath(locator), text, message); 522 } 523 524 protected void waitAndTypeByName(String name, String text) throws InterruptedException { 525 waitAndType(By.name(name), text); 526 } 527 528 protected void selectByXpath(String locator, String selectText) throws InterruptedException { 529 select(By.xpath(locator), selectText); 530 } 531 532 protected void selectByName(String name, String selectText) throws InterruptedException { 533 select(By.name(name), selectText); 534 } 535 536 protected void select(By by, String selectText) throws InterruptedException { 537 WebElement select1 = driver.findElement(by); 538 List<WebElement> options = select1.findElements(By.tagName("option")); 539 for(WebElement option : options){ 540 if(option.getText().equals(selectText)){ 541 option.click(); 542 break; 543 } 544 } 545 } 546 547 protected void selectOptionByName(String name, String optionValue) throws InterruptedException { 548 selectOption(By.name(name), optionValue); 549 } 550 551 protected void selectOptionByXpath(String locator, String optionValue) throws InterruptedException { 552 selectOption(By.name(locator), optionValue); 553 } 554 555 protected void selectOption(By by, String optionValue) throws InterruptedException { 556 WebElement select1 = driver.findElement(by); 557 List<WebElement> options = select1.findElements(By.tagName("option")); 558 for(WebElement option : options){ 559 if(option.getAttribute("value").equals(optionValue)){ 560 option.click(); 561 break; 562 } 563 } 564 } 565 566 protected String[] getSelectOptions(By by) throws InterruptedException { 567 WebElement select1 = driver.findElement(by); 568 List<WebElement> options = select1.findElements(By.tagName("option")); 569 String[] optionValues = new String[options.size()]; 570 int counter=0; 571 for(WebElement option : options){ 572 optionValues[counter] = option.getAttribute("value"); 573 counter++; 574 } 575 return optionValues; 576 } 577 578 protected String[] getSelectOptionsByName(String name) throws InterruptedException { 579 return getSelectOptions(By.name(name)); 580 } 581 582 protected String[] getSelectOptionsByXpath(String locator) throws InterruptedException { 583 return getSelectOptions(By.xpath(locator)); 584 } 585 586 protected int getCssCount(String selector) { 587 return getCssCount(By.cssSelector(selector)); 588 } 589 590 protected int getCssCount(By by) { 591 return (driver.findElements(by)).size(); 592 } 593 594 protected void checkErrorMessageItem(String message) 595 { 596 final String error_locator = "//li[@class='uif-errorMessageItem']"; 597 assertElementPresentByXpath(error_locator); 598 String errorText=null; 599 try { 600 errorText = getTextByXpath(error_locator); 601 } catch (InterruptedException e) { 602 e.printStackTrace(); 603 } 604 if (errorText != null && errorText.contains("errors")) { 605 Assert.fail(errorText + message); 606 } 607 608 } 609 610 protected boolean isVisible(String locator) { 611 return driver.findElement(By.cssSelector(locator)).isDisplayed(); 612 } 613 614 protected boolean isVisible(By by) { 615 return driver.findElement(by).isDisplayed(); 616 } 617 618 protected boolean isVisibleByXpath(String locator) { 619 return isVisible(By.xpath(locator)); 620 } 621 622 protected void waitNotVisible(By by) throws InterruptedException { 623 for (int second = 0;; second++) { 624 if (second >= 60) { 625 Assert.fail("timeout"); 626 } 627 628 if (!isVisible(by)) { 629 break; 630 } 631 632 Thread.sleep(1000); 633 } 634 } 635 636 protected void waitNotVisibleByXpath(String locator) throws InterruptedException { 637 waitNotVisible(By.xpath(locator)); 638 } 639 640 protected void waitIsVisible(By by) throws InterruptedException { 641 for (int second = 0;; second++) { 642 if (second >= 60) { 643 Assert.fail("timeout"); 644 } 645 if (isVisible(by)) { 646 break; 647 } 648 Thread.sleep(1000); 649 } 650 } 651 652 protected void waitForElementVisible(String elementLocator, String message) throws InterruptedException { 653 boolean failed = false; 654 for (int second = 0;; second++) { 655 if (second >= 60) failed = true; 656 try { if (failed || (driver.findElements(By.cssSelector(elementLocator))).size()>0) break; } catch (Exception e) {} 657 Thread.sleep(1000); 658 } 659 checkForIncidentReport(elementLocator); // after timeout to be sure page is loaded 660 if (failed) fail("timeout of 60 seconds waiting for " + elementLocator + " " + message + " " + driver.getCurrentUrl()); 661 } 662 663 protected void waitIsVisible(String locator) throws InterruptedException { 664 waitIsVisible(By.cssSelector(locator)); 665 } 666 667 protected void waitIsVisibleByXpath(String locator) throws InterruptedException { 668 waitIsVisible(By.xpath(locator)); 669 } 670 671 protected void colapseExpandByXpath(String clickLocator, String visibleLocator) throws InterruptedException { 672 waitAndClickByXpath(clickLocator); 673 waitNotVisibleByXpath(visibleLocator); 674 675 waitAndClickByXpath(clickLocator); 676 waitIsVisibleByXpath(visibleLocator); 677 } 678 679 protected void expandColapseByXpath(String clickLocator, String visibleLocator) throws InterruptedException { 680 waitAndClickByXpath(clickLocator); 681 waitIsVisibleByXpath(visibleLocator); 682 683 waitAndClickByXpath(clickLocator); 684 waitNotVisibleByXpath(visibleLocator); 685 } 686 687 public void switchToWindow(String title) { 688 Set<String> windows = driver.getWindowHandles(); 689 690 for (String window : windows) { 691 driver.switchTo().window(window); 692 if (driver.getTitle().contains(title)) { 693 return; 694 } 695 } 696 } 697 698 protected void check(By by) throws InterruptedException { 699 WebElement element =driver.findElement(by); 700 if(!element.isSelected()){ 701 element.click(); 702 } 703 } 704 705 protected void checkByName(String name) throws InterruptedException { 706 check(By.name(name)); 707 } 708 709 protected void checkByXpath(String locator) throws InterruptedException { 710 check(By.xpath(locator)); 711 } 712 713 protected void uncheck(By by) throws InterruptedException { 714 WebElement element =driver.findElement(by); 715 if(element.isSelected()){ 716 element.click(); 717 } 718 } 719 720 protected void uncheckByName(String name) throws InterruptedException { 721 uncheck(By.name(name)); 722 } 723 724 protected void uncheckByXpath(String locator) throws InterruptedException { 725 uncheck(By.xpath(locator)); 726 } 727 728 protected void fireEvent(String name, String event) { 729 ((JavascriptExecutor)driver).executeScript( 730 "var elements=document.getElementsByName(\""+name+"\");"+ 731 "for (var i = 0; i < elements.length; i++){"+ 732 "elements[i]."+event+"();}" 733 ); 734 } 735 736 protected void fireEvent(String name, String value, String event) { 737 ((JavascriptExecutor)driver).executeScript( 738 "var elements=document.getElementsByName(\""+name+"\");"+ 739 "for (var i = 0; i < elements.length; i++){"+ 740 "if(elements[i].value=='"+value+"')"+ 741 "elements[i]."+event+"();}" 742 ); 743 } 744 745 public void fireMouseOverEventByName(String name) { 746 this.fireMouseOverEvent(By.name(name)); 747 } 748 749 public void fireMouseOverEventByXpath(String locator) { 750 this.fireMouseOverEvent(By.xpath(locator)); 751 } 752 753 public void fireMouseOverEvent(By by) { 754 Actions builder = new Actions(driver); 755 Actions hover = builder.moveToElement(driver.findElement(by)); 756 hover.perform(); 757 758 } 759 }