I am trying to explore a feature of adding growl notifications to the tests. This enables the messages to be added on the screen while test execution.
I am trying this approach by following steps specified in : http://elementalselenium.com/tips/53-growl
Machine: windows 10 Selenium version : 2.53 Browser : Firefox 49
Below is script which i am using:
public class GrowlTest {
static String JGROWL_SCRIPT = "http://cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.2.12/jquery.jgrowl.min.js";
static String JQUERY_SCRIPT = "http://code.jquery.com/jquery-1.11.1.min.js";
static String JGROWL_STYLE = "http://cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.2.12/jquery.jgrowl.min.css";
static FirefoxDriver driver;
public static void main(String [] args) throws InterruptedException
{
driver =new FirefoxDriver();
driver.manage().window().maximize();
//waitForJStoLoad();
driver.manage().deleteAllCookies();
growlNotification(driver,"hi this is inital test..", "try");
driver.get("http://www.amazon.com");
Thread.sleep(10000);
System.out.println("waiting for popup to come..");
driver.findElement(By.xpath("//*[contains(text(),'Stay')]")).click();
System.out.println("clicked on pop up..now waiting for notification...");
Thread.sleep(10000);
System.out.println("wait is completed..");
growlNotification(driver,"Hi First try","first:");
Thread.sleep(2000);
growlNotification(driver,"Hi second try","second:");
Thread.sleep(2000);
growlNotification(driver,"Hi third try","third:");
Thread.sleep(2000);
growlNotification(driver,"Hi fourth try","fourth:");
Thread.sleep(2000);
driver.quit();
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private static void growlNotification(WebDriver driver, String msg, String header) throws InterruptedException
{
FirefoxDriver js=(FirefoxDriver) driver;
js.executeScript("if (!window.jQuery) {var jquery = document.createElement('script'); jquery.type = 'text/javascript';jquery.src = 'https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js';document.getElementsByTagName('head')[0].appendChild(jquery)}");
//TODO Add check for existing jQuery on page
js.executeScript( "var jq = document.createElement('script'); jq.type = 'text/javascript'; jq.src = '" +
JQUERY_SCRIPT + "'; document.getElementsByTagName('head')[0].appendChild(jq);" );
js.executeScript( "$.getScript(\"" + JGROWL_SCRIPT + "\");" );
js.executeScript( "var lnk = document.createElement('link'); lnk.rel = 'stylesheet'; lnk.href = '" +
JGROWL_STYLE + "'; lnk.type = 'text/css'; document.getElementsByTagName('head')[0].appendChild(lnk);" );
js.executeScript( "$.jGrowl('" + msg + "', { header: '" + header + "' });" );
}
}
On executing this i get below error:
waiting for popup to come.. clicked on pop up..now waiting for notification... wait is completed.. Exception in thread "main" org.openqa.selenium.WebDriverException: $.jGrowl is not a function Command duration or timeout: 17 milliseconds Build info: version: '2.53.0', revision: '35ae25b', time: '2016-03-15 16:57:40' System info: host: 'mkarthik-WX-1', ip: '192.168.0.106', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_73' Driver info: org.openqa.selenium.firefox.FirefoxDriver Capabilities [{applicationCacheEnabled=true, rotatable=false, handlesAlerts=true, databaseEnabled=true, version=40.0, platform=WINDOWS, nativeEvents=false, acceptSslCerts=true, webStorageEnabled=true, locationContextEnabled=true, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}] Session ID: 8249259c-1211-4472-b52f-fc0471061816 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206) at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678) at org.openqa.selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:577) at com.tests.GrowlTest.growlNotification(GrowlTest.java:74) at com.tests.GrowlTest.main(GrowlTest.java:38) Caused by: org.openqa.selenium.WebDriverException: $.jGrowl is not a function Build info: version: '2.53.0', revision: '35ae25b', time: '2016-03-15 16:57:40' System info: host: 'mkarthik-WX-1', ip: '192.168.0.106', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_73'
However, the same script works when i execute the below code :
package com.tests;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import com.google.common.base.Predicate;
public class GrowlTest {
static String JGROWL_SCRIPT = "http://cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.2.12/jquery.jgrowl.min.js";
static String JQUERY_SCRIPT = "http://code.jquery.com/jquery-1.11.1.min.js";
static String JGROWL_STYLE = "http://cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.2.12/jquery.jgrowl.min.css";
static FirefoxDriver driver;
public static void main(String [] args) throws InterruptedException
{
driver =new FirefoxDriver();
driver.manage().window().maximize();
//waitForJStoLoad();
driver.manage().deleteAllCookies();
growlNotification(driver,"hi this is inital test..", "try");
driver.get("http://www.amazon.in");
Thread.sleep(10000);
System.out.println("waiting for popup to come..");
driver.findElement(By.xpath("//*[contains(text(),'Stay')]")).click();
System.out.println("clicked on pop up..now waiting for notification...");
Thread.sleep(10000);
System.out.println("wait is completed..");
growlNotification(driver,"Hi First try","first:");
Thread.sleep(2000);
growlNotification(driver,"Hi second try","second:");
Thread.sleep(2000);
growlNotification(driver,"Hi third try","third:");
Thread.sleep(2000);
growlNotification(driver,"Hi fourth try","fourth:");
Thread.sleep(2000);
driver.quit();
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private static void growlNotification(WebDriver driver, String msg, String header) throws InterruptedException
{
FirefoxDriver js=(FirefoxDriver) driver;
js.executeScript("if (!window.jQuery) {var jquery = document.createElement('script'); jquery.type = 'text/javascript';jquery.src = 'https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js';document.getElementsByTagName('head')[0].appendChild(jquery)}");
//TODO Add check for existing jQuery on page
js.executeScript( "var jq = document.createElement('script'); jq.type = 'text/javascript'; jq.src = '" +
JQUERY_SCRIPT + "'; document.getElementsByTagName('head')[0].appendChild(jq);" );
js.executeScript( "$.getScript(\"" + JGROWL_SCRIPT + "\");" );
js.executeScript( "var lnk = document.createElement('link'); lnk.rel = 'stylesheet'; lnk.href = '" +
JGROWL_STYLE + "'; lnk.type = 'text/css'; document.getElementsByTagName('head')[0].appendChild(lnk);" );
js.executeScript( "$.jGrowl('" + msg + "', { header: '" + header + "' });" );
}
}
Kindly help and suggest what needs to be done.
Thanks and regards, Karthik