The JavascriptExecutor class

The Selenium JavascriptExecutor class allows users to inject JavaScript commands directly into the context of the active browser frame or window. The use of this method is required in cases where the standard WebDriver class's methods fail to find or act upon an element on the browser page. JavaScript commands can be executed synchronously or asynchronously on the page. The class is an interface, and has been implemented for all the current driver classes. When designing a class to utilize this interface, users can pass commands directly to a WebElement by using the static locator, or one of the common locator methods available to WebDriver. Some of the more common methods will be outlined here:

/**
* Selenium JavaScript Executor Utility Class
*
*/
public class
JavaScriptUtils {

// constructor
public JavaScriptUtils() {
}

}

/**
* execute - generic method to execute a non-parameterized JS command
*
* @param command
*/
public static void execute(String command) {
WebDriver driver = CreateDriver.getInstance().getDriver();

JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript(command);
}
/**
* execute - overloaded method to execute a JS command on WebElement
*
* @param command
* @param element
*/
public static void execute(String command,
WebElement element) {

WebDriver driver = CreateDriver.getInstance().getDriver();

JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript(command, element);
}

/**
* click - method to execute a JavaScript click event
*
* @param element
*/
public static void click(WebElement element) {
WebDriver driver = CreateDriver.getInstance().getDriver();

JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", element);
}

/**
* click - overloaded method to execute a JavaScript click event using By
*
* @param by
*/
public static void click(By by) {
WebDriver driver = CreateDriver.getInstance().getDriver();
WebElement element = driver.findElement(by);

JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", element);
}

/**
* sendKeys - method to execute a JavaScript value event
*
* @param keys
* @param element
*/
public static void sendKeys(String keys,
WebElement element) {

WebDriver driver = CreateDriver.getInstance().getDriver();

JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].value='" + keys + "';", element);
}

Occasionally, test scripts need to be synchronized using a page event like the completion of the page rendering, an Ajax control completing, and so on. That can also be accomplished using the JavascriptExecutor class. The following methods wait for a page or Ajax control to complete:

/**
* isPageReady - method to verify that a page has completely rendered
*
* @param driver
* @return boolean
*/
public static boolean isPageReady(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor)driver;
return
(Boolean)js.executeScript("return document.readyState")
.equals("complete");
}


/**
* isAjaxReady - method to verify that an ajax control has rendered
*
* @param driver
* @return boolean
*/
public static boolean isAjaxReady(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor)driver;
return (Boolean)js.executeScript("return jQuery.active == 0");
}

Other JavaScript command examples that can be passed to a method in this class include:

  • Set focus by ID: document.getElementById('" + id +"')[0].focus()
  • Scrolling: arguments[0].scrollIntoView(true or false);
  • Set style visibility by ID: document.getElementById('" + id + "').style.visibility = 'visible';
  • Set style block by ID: document.getElementById('" + id + "').style.display = 'block';
  • Set style block by ID: document.getElementByClassName('"+ class +"').style.display = 'block';
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.140.198.173