1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package edu.samplu.common;
17
18 import org.junit.After;
19 import org.junit.Assert;
20 import org.junit.Before;
21 import org.junit.BeforeClass;
22 import org.junit.Rule;
23 import org.junit.rules.TestName;
24 import org.openqa.selenium.By;
25 import org.openqa.selenium.JavascriptExecutor;
26 import org.openqa.selenium.NoSuchFrameException;
27 import org.openqa.selenium.WebDriver;
28 import org.openqa.selenium.WebElement;
29 import org.openqa.selenium.chrome.ChromeDriverService;
30 import org.openqa.selenium.interactions.Actions;
31 import org.openqa.selenium.remote.RemoteWebDriver;
32
33 import java.io.BufferedReader;
34 import java.io.InputStreamReader;
35 import java.net.HttpURLConnection;
36 import java.net.URL;
37 import java.util.List;
38 import java.util.Set;
39 import java.util.concurrent.TimeUnit;
40
41 import static com.thoughtworks.selenium.SeleneseTestBase.fail;
42 import static org.junit.Assert.assertEquals;
43
44
45
46
47
48
49 public abstract class WebDriverLegacyITBase {
50
51 public static final int DEFAULT_WAIT_SEC = 60;
52 public static final String REMOTE_PUBLIC_USERPOOL_PROPERTY = "remote.public.userpool";
53 public static final String REMOTE_PUBLIC_USER_PROPERTY = "remote.public.user";
54
55 public abstract String getTestUrl();
56
57 protected WebDriver driver;
58 protected String user = "admin";
59 protected boolean passed = false;
60 static ChromeDriverService chromeDriverService;
61
62 public @Rule TestName testName= new TestName();
63
64 String sessionId = null;
65
66 public String getSessionId() {
67 return sessionId;
68 }
69
70 @BeforeClass
71 public static void createAndStartService() throws Exception {
72 chromeDriverService = WebDriverUtil.createAndStartService();
73 if (chromeDriverService != null) chromeDriverService.start();
74 }
75
76
77
78
79
80
81 @Before
82 public void setUp() throws Exception {
83
84 try {
85 if (System.getProperty(REMOTE_PUBLIC_USER_PROPERTY) != null) {
86 user = System.getProperty(REMOTE_PUBLIC_USER_PROPERTY);
87 } else if (System.getProperty(REMOTE_PUBLIC_USERPOOL_PROPERTY) != null) {
88 String userResponse = getHTML(ITUtil.prettyHttp(System.getProperty(REMOTE_PUBLIC_USERPOOL_PROPERTY) + "?test=" + this.toString().trim()));
89 user = userResponse.substring(userResponse.lastIndexOf(":" ) + 2, userResponse.lastIndexOf("\""));
90 }
91 driver = WebDriverUtil.setUp(getUserName(), ITUtil.getBaseUrlString() + getTestUrl(), getClass().getSimpleName(), testName);
92 this.sessionId = ((RemoteWebDriver)driver).getSessionId().toString();
93 } catch (Exception e) {
94 fail("Exception in setUp " + e.getMessage());
95 e.printStackTrace();
96 }
97 ITUtil.login(driver, user);
98 }
99
100 @After
101 public void tearDown() throws Exception {
102 try {
103
104
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 assertElementPresentByLinkText(String linkText) {
174 driver.findElement(By.linkText(linkText));
175 }
176
177 protected void assertElementPresent(String locator) {
178 driver.findElement(By.cssSelector(locator));
179 }
180
181 protected void assertTextPresent(String text) {
182 assertTextPresent(text, "");
183 }
184
185 protected void assertTextPresent(String text, String message) {
186 if (!driver.getPageSource().contains(text)) {
187 Assert.fail(text + " not present " + message);
188 }
189 }
190
191 protected void blanketApproveTest() throws InterruptedException {
192 ITUtil.checkForIncidentReport(driver.getPageSource(), "methodToCall.blanketApprove", "");
193 waitAndClickByName("methodToCall.blanketApprove", "No blanket approve button does the user " + getUserName() + " have permission?");
194 Thread.sleep(2000);
195
196 if (driver.findElements(By.xpath(ITUtil.DIV_ERROR_LOCATOR)).size()>0) {
197 String errorText = driver.findElement(By.xpath(ITUtil.DIV_ERROR_LOCATOR)).getText();
198 if (errorText != null && errorText.contains("error(s) found on page.")) {
199 errorText = ITUtil.blanketApprovalCleanUpErrorText(errorText);
200 if (driver.findElements(By.xpath(ITUtil.DIV_EXCOL_LOCATOR)).size()>0) {
201 errorText = ITUtil.blanketApprovalCleanUpErrorText(driver.findElement(By.xpath(ITUtil.DIV_EXCOL_LOCATOR)).getText());
202 }
203
204
205
206
207 Assert.fail(errorText);
208 }
209 }
210 ITUtil.checkForIncidentReport(driver.getPageSource(), "//img[@alt='doc search']", "Blanket Approve failure");
211 waitAndClickByXpath("//img[@alt='doc search']");
212 assertEquals("Kuali Portal Index", driver.getTitle());
213 selectFrame("iframeportlet");
214 waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']");
215 }
216
217 protected void checkForIncidentReport() {
218 checkForIncidentReport("", "");
219 }
220
221 protected void checkForIncidentReport(String locator) {
222 checkForIncidentReport(locator, "");
223 }
224
225 protected void checkForIncidentReport(String locator, String message) {
226 WebDriverUtil.checkForIncidentReport(driver, locator, message);
227 }
228
229 protected void clearText(By by) throws InterruptedException {
230 driver.findElement(by).clear();
231 }
232
233 protected void clearText(String selector) throws InterruptedException {
234 clearText(By.cssSelector(selector));
235 }
236
237 protected void clearTextByName(String name) throws InterruptedException {
238 clearText(By.name(name));
239 }
240
241 protected void clearTextByXpath(String locator) throws InterruptedException {
242 clearText(By.xpath(locator));
243 }
244
245 protected String getAttribute(By by, String attribute) throws InterruptedException {
246 waitFor(by);
247 return driver.findElement(by).getAttribute(attribute);
248 }
249
250
251
252
253
254
255
256 protected String getAttributeByName(String name,String attribute) throws InterruptedException {
257 return getAttribute(By.name(name),attribute);
258 }
259
260
261
262
263
264
265
266 protected String getAttributeByXpath(String locator,String attribute) throws InterruptedException {
267 return getAttribute(By.xpath(locator),attribute);
268 }
269
270 protected String getBaseUrlString() {
271 return ITUtil.getBaseUrlString();
272 }
273
274 protected String getText(By by) throws InterruptedException {
275 return driver.findElement(by).getText();
276 }
277
278 protected String getTextByName(String name) throws InterruptedException {
279 return getText(By.name(name));
280 }
281
282 protected String getText(String locator) throws InterruptedException {
283 return getText(By.cssSelector(locator));
284 }
285
286 protected String getTextByXpath(String locator) throws InterruptedException {
287 return getText(By.xpath(locator));
288 }
289
290 protected String getTitle() {
291 return driver.getTitle();
292 }
293
294
295
296
297
298 public String getUserName() {
299 return user;
300 }
301
302
303
304
305 protected void gotoNestedFrame() {
306 driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
307 driver.switchTo().defaultContent();
308 if(driver.findElements(By.xpath("//iframe")).size() > 0) {
309 WebElement containerFrame = driver.findElement(By.xpath("//iframe"));
310 driver.switchTo().frame(containerFrame);
311 }
312 if(driver.findElements(By.xpath("//iframe")).size() > 0) {
313 WebElement contentFrame = driver.findElement(By.xpath("//iframe"));
314 driver.switchTo().frame(contentFrame);
315 }
316 driver.manage().timeouts().implicitlyWait(DEFAULT_WAIT_SEC, TimeUnit.SECONDS);
317 }
318
319 protected boolean isElementPresent(By by) {
320 return (driver.findElements(by)).size()>0;
321 }
322
323 protected boolean isElementPresent(String locator) {
324 return (driver.findElements(By.cssSelector(locator))).size()>0;
325 }
326
327 protected boolean isElementPresentByName(String name) {
328 return isElementPresent(By.name(name));
329 }
330
331 protected boolean isElementPresentByXpath(String locator) {
332 return isElementPresent(By.xpath(locator));
333 }
334
335 protected boolean isElementPresentByLinkText(String locator) {
336 return isElementPresent(By.linkText(locator));
337 }
338
339 protected void open(String url) {
340 driver.get(url);
341 }
342
343 protected void selectFrame(String locator) {
344 if ("iframeportlet".equals(locator)) {
345 gotoNestedFrame();
346 } else {
347 try {
348 driver.switchTo().frame(locator);
349 } catch (NoSuchFrameException nsfe) {
350
351 }
352 }
353 }
354
355 protected void selectTopFrame() {
356 driver.switchTo().defaultContent();
357 }
358
359 protected void selectWindow(String locator) {
360 driver.switchTo().window(locator);
361 }
362
363 protected void close() {
364 driver.close();
365 }
366
367 protected void testCancelConfirmation() throws InterruptedException {
368 waitAndCancelConfirmation();
369 passed();
370 }
371
372 protected void testCreateNewSearchReturnValueCancelConfirmation() throws InterruptedException, Exception {
373 selectFrame("iframeportlet");
374 waitAndCreateNew();
375 waitAndSearch();
376 waitAndReturnValue();
377 waitAndCancelConfirmation();
378 passed();
379 }
380
381 protected void testSearchEditCancel() throws InterruptedException {
382 selectFrame("iframeportlet");
383 waitAndSearch();
384 waitAndEdit();
385 testCancelConfirmation();
386 }
387
388 protected void testVerifyAddDeleteFiscalOfficerLegacy() throws Exception {
389 selectFrame("iframeportlet");
390 waitAndTypeByName("document.documentHeader.documentDescription", ITUtil.DTS_TWO);
391 waitAndTypeByName("newCollectionLines['document.newMaintainableObject.dataObject.fiscalOfficer.accounts'].number", "1234567890");
392 waitAndTypeByName("newCollectionLines['document.newMaintainableObject.dataObject.fiscalOfficer.accounts'].foId", "2");
393
394 waitAndClickByXpath("//button[@data-loadingmessage='Adding Line...']");
395
396 assertElementPresentByName("document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].number", "https://jira.kuali.org/browse/KULRICE-8564");
397
398 assertEquals("1234567890", getAttributeByName("document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].number","value"));
399 assertEquals("2", getAttributeByName("document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].foId","value"));
400
401 waitAndClickByXpath("//button[@data-loadingmessage='Deleting Line...']");
402
403 assertElementPresentByName("document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].number");
404 passed();
405 }
406
407 protected void waitAndCancelConfirmation() throws InterruptedException {
408 waitAndClickByName("methodToCall.cancel");
409 waitAndClickByName("methodToCall.processAnswer.button0");
410 }
411
412 protected void waitAndCreateNew() throws InterruptedException {
413 waitAndClickByXpath("//img[@alt='create new']");
414
415 }
416
417 protected void waitAndEdit() throws InterruptedException {
418 waitAndClickByLinkText("edit");
419 }
420
421 protected void waitAndReturnValue() throws InterruptedException {
422 waitAndClickByLinkText("return value");
423 }
424
425 protected void waitAndSearch() throws InterruptedException {
426 waitAndClickByXpath("//input[@value='search']");
427
428
429
430 }
431
432 protected String waitForDocId() throws InterruptedException {
433 waitForElementPresentByXpath("//div[@id='headerarea']/div/table/tbody/tr[1]/td[1]");
434 return driver.findElement(By.xpath("//div[@id='headerarea']/div/table/tbody/tr[1]/td[1]")).getText();
435 }
436
437 protected void waitForElementPresent(String locator) throws InterruptedException {
438 waitFor(By.cssSelector(locator));
439 }
440
441 protected void waitForElementPresentByXpath(String locator) throws InterruptedException {
442 waitFor(By.xpath(locator));
443 }
444
445 protected void waitForElementPresentByName(String name) throws InterruptedException {
446 waitFor(By.name(name));
447 }
448
449 protected void waitForTitleToEqualKualiPortalIndex() throws InterruptedException {
450 waitForTitleToEqualKualiPortalIndex("");
451 }
452
453 protected void waitForTitleToEqualKualiPortalIndex(String message) throws InterruptedException {
454 Thread.sleep(2000);
455
456
457
458
459
460
461
462
463
464 }
465
466 protected void waitAndClick(String locator) throws InterruptedException {
467 waitAndClick(locator, "");
468 }
469
470 protected void waitForPageToLoad() {
471
472 }
473
474 protected void waitFor(By by) throws InterruptedException {
475 waitFor(by, "");
476 }
477
478 protected void waitFor(By by, String message) throws InterruptedException {
479
480 Thread.sleep(1000);
481 driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
482
483
484 try { driver.findElement(by);
485
486 } catch (Exception e) {}
487 driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
488
489 }
490
491 protected void waitAndClick(By by) throws InterruptedException {
492 waitAndClick(by, "");
493 }
494
495 protected void waitAndClick(By by, String message) throws InterruptedException {
496 waitFor(by, message);
497 try {
498 (driver.findElement(by)).click();
499 } catch (Exception e) {
500 fail(e.getMessage() + " " + by.toString() + " " + message + " " + driver.getCurrentUrl() );
501 e.printStackTrace();
502 }
503 }
504
505 protected void waitAndClick(String locator, String message) throws InterruptedException {
506 waitAndClick(By.cssSelector(locator), message);
507 }
508
509 protected void waitAndClickByLinkText(String text) throws InterruptedException {
510 waitAndClick(By.linkText(text),"");
511 }
512
513 protected void waitAndClickByLinkText(String text, String message) throws InterruptedException {
514 waitAndClick(By.linkText(text), message);
515 }
516
517 protected void waitAndClickByName(String name) throws InterruptedException {
518 waitAndClick(By.name(name), "");
519 }
520
521 protected void waitAndClickByXpath(String xpath) throws InterruptedException {
522 waitAndClick(By.xpath(xpath));
523 }
524
525 protected void waitAndClickByName(String name, String message) throws InterruptedException {
526 waitAndClick(By.name(name), message);
527 }
528
529 protected void waitAndClickByXpath(String xpath, String message) throws InterruptedException {
530 waitAndClick(By.xpath(xpath), message);
531 }
532
533 protected void waitAndType(By by, String text) throws InterruptedException {
534 waitFor(by, "");
535 try {
536 (driver.findElement(by)).sendKeys(text);
537 } catch (Exception e) {
538 fail(e.getMessage() + " " + by.toString() + " unable to type text '" + text + "' current url " + driver.getCurrentUrl()
539 + "\n" + ITUtil.deLinespace(driver.getPageSource())
540 );
541 e.printStackTrace();
542 }
543 }
544
545 protected void waitAndType(By by, String text, String message) throws InterruptedException {
546 waitFor(by, "");
547 try {
548 (driver.findElement(by)).sendKeys(text);
549 } catch (Exception e) {
550 fail(e.getMessage() + " " + by.toString() + " unable to type text '" + text + "' " + message + " current url " + driver.getCurrentUrl()
551 + "\n" + ITUtil.deLinespace(driver.getPageSource())
552 );
553 e.printStackTrace();
554 }
555 }
556
557 protected void waitAndType(String selector, String text) throws InterruptedException {
558 waitAndType(By.cssSelector(selector), text);
559 }
560
561 protected void waitAndTypeByXpath(String locator, String text) throws InterruptedException {
562 waitAndType(By.xpath(locator), text);
563 }
564
565 protected void waitAndTypeByXpath(String locator, String text, String message) throws InterruptedException {
566 waitAndType(By.xpath(locator), text, message);
567 }
568
569 protected void waitAndTypeByName(String name, String text) throws InterruptedException {
570 waitAndType(By.name(name), text);
571 }
572
573 protected void selectByXpath(String locator, String selectText) throws InterruptedException {
574 select(By.xpath(locator), selectText);
575 }
576
577 protected void selectByName(String name, String selectText) throws InterruptedException {
578 select(By.name(name), selectText);
579 }
580
581 protected void select(By by, String selectText) throws InterruptedException {
582 WebElement select1 = driver.findElement(by);
583 List<WebElement> options = select1.findElements(By.tagName("option"));
584 for(WebElement option : options){
585 if(option.getText().equals(selectText)){
586 option.click();
587 break;
588 }
589 }
590 }
591
592 protected void selectOptionByName(String name, String optionValue) throws InterruptedException {
593 selectOption(By.name(name), optionValue);
594 }
595
596 protected void selectOptionByXpath(String locator, String optionValue) throws InterruptedException {
597 selectOption(By.name(locator), optionValue);
598 }
599
600 protected void selectOption(By by, String optionValue) throws InterruptedException {
601 WebElement select1 = driver.findElement(by);
602 List<WebElement> options = select1.findElements(By.tagName("option"));
603 for(WebElement option : options){
604 if(option.getAttribute("value").equals(optionValue)){
605 option.click();
606 break;
607 }
608 }
609 }
610
611 protected String[] getSelectOptions(By by) throws InterruptedException {
612 WebElement select1 = driver.findElement(by);
613 List<WebElement> options = select1.findElements(By.tagName("option"));
614 String[] optionValues = new String[options.size()];
615 int counter=0;
616 for(WebElement option : options){
617 optionValues[counter] = option.getAttribute("value");
618 counter++;
619 }
620 return optionValues;
621 }
622
623 protected String[] getSelectOptionsByName(String name) throws InterruptedException {
624 return getSelectOptions(By.name(name));
625 }
626
627 protected String[] getSelectOptionsByXpath(String locator) throws InterruptedException {
628 return getSelectOptions(By.xpath(locator));
629 }
630
631 protected int getCssCount(String selector) {
632 return getCssCount(By.cssSelector(selector));
633 }
634
635 protected int getCssCount(By by) {
636 return (driver.findElements(by)).size();
637 }
638
639 protected void checkErrorMessageItem(String message)
640 {
641 final String error_locator = "//li[@class='uif-errorMessageItem']";
642 assertElementPresentByXpath(error_locator);
643 String errorText=null;
644 try {
645 errorText = getTextByXpath(error_locator);
646 } catch (InterruptedException e) {
647 e.printStackTrace();
648 }
649 if (errorText != null && errorText.contains("errors")) {
650 Assert.fail(errorText + message);
651 }
652
653 }
654
655 protected boolean isVisible(String locator) {
656 return driver.findElement(By.cssSelector(locator)).isDisplayed();
657 }
658
659 protected boolean isVisible(By by) {
660 return driver.findElement(by).isDisplayed();
661 }
662
663 protected boolean isVisibleByXpath(String locator) {
664 return isVisible(By.xpath(locator));
665 }
666
667 protected void waitNotVisible(By by) throws InterruptedException {
668 for (int second = 0;; second++) {
669 if (second >= 60) {
670 Assert.fail("timeout");
671 }
672
673 if (!isVisible(by)) {
674 break;
675 }
676
677 Thread.sleep(1000);
678 }
679 }
680
681 protected void waitNotVisibleByXpath(String locator) throws InterruptedException {
682 waitNotVisible(By.xpath(locator));
683 }
684
685 protected void waitIsVisible(By by) throws InterruptedException {
686 for (int second = 0;; second++) {
687 if (second >= 60) {
688 Assert.fail("timeout");
689 }
690 if (isVisible(by)) {
691 break;
692 }
693 Thread.sleep(1000);
694 }
695 }
696
697 protected void waitForElementVisible(String elementLocator, String message) throws InterruptedException {
698 boolean failed = false;
699 for (int second = 0;; second++) {
700 if (second >= 60) failed = true;
701 try { if (failed || (driver.findElements(By.cssSelector(elementLocator))).size()>0) break; } catch (Exception e) {}
702 Thread.sleep(1000);
703 }
704 checkForIncidentReport(elementLocator);
705 if (failed) fail("timeout of 60 seconds waiting for " + elementLocator + " " + message + " " + driver.getCurrentUrl());
706 }
707
708 protected void waitIsVisible(String locator) throws InterruptedException {
709 waitIsVisible(By.cssSelector(locator));
710 }
711
712 protected void waitIsVisibleByXpath(String locator) throws InterruptedException {
713 waitIsVisible(By.xpath(locator));
714 }
715
716 protected void colapseExpandByXpath(String clickLocator, String visibleLocator) throws InterruptedException {
717 waitAndClickByXpath(clickLocator);
718 waitNotVisibleByXpath(visibleLocator);
719
720 waitAndClickByXpath(clickLocator);
721 waitIsVisibleByXpath(visibleLocator);
722 }
723
724 protected void expandColapseByXpath(String clickLocator, String visibleLocator) throws InterruptedException {
725 waitAndClickByXpath(clickLocator);
726 waitIsVisibleByXpath(visibleLocator);
727
728 waitAndClickByXpath(clickLocator);
729 waitNotVisibleByXpath(visibleLocator);
730 }
731
732 public void switchToWindow(String title) {
733 Set<String> windows = driver.getWindowHandles();
734
735 for (String window : windows) {
736 driver.switchTo().window(window);
737 if (driver.getTitle().contains(title)) {
738 return;
739 }
740 }
741 }
742
743 public String [] getAllWindowTitles() {
744 return (String[]) driver.getWindowHandles().toArray();
745 }
746
747
748 protected void check(By by) throws InterruptedException {
749 WebElement element =driver.findElement(by);
750 if(!element.isSelected()){
751 element.click();
752 }
753 }
754
755 protected void checkByName(String name) throws InterruptedException {
756 check(By.name(name));
757 }
758
759 protected void checkByXpath(String locator) throws InterruptedException {
760 check(By.xpath(locator));
761 }
762
763 protected void uncheck(By by) throws InterruptedException {
764 WebElement element =driver.findElement(by);
765 if(element.isSelected()){
766 element.click();
767 }
768 }
769
770 protected void uncheckByName(String name) throws InterruptedException {
771 uncheck(By.name(name));
772 }
773
774 protected void uncheckByXpath(String locator) throws InterruptedException {
775 uncheck(By.xpath(locator));
776 }
777
778 protected void fireEvent(String name, String event) {
779 ((JavascriptExecutor)driver).executeScript(
780 "var elements=document.getElementsByName(\""+name+"\");"+
781 "for (var i = 0; i < elements.length; i++){"+
782 "elements[i]."+event+"();}"
783 );
784 }
785
786 protected void fireEvent(String name, String value, String event) {
787 ((JavascriptExecutor)driver).executeScript(
788 "var elements=document.getElementsByName(\""+name+"\");"+
789 "for (var i = 0; i < elements.length; i++){"+
790 "if(elements[i].value=='"+value+"')"+
791 "elements[i]."+event+"();}"
792 );
793 }
794
795 public void fireMouseOverEventByName(String name) {
796 this.fireMouseOverEvent(By.name(name));
797 }
798
799 public void fireMouseOverEventByXpath(String locator) {
800 this.fireMouseOverEvent(By.xpath(locator));
801 }
802
803 public void fireMouseOverEvent(By by) {
804 Actions builder = new Actions(driver);
805 Actions hover = builder.moveToElement(driver.findElement(by));
806 hover.perform();
807
808 }
809 }