Wednesday, 3 February 2016

WebDriver - Simple Architecture


Webdriver is an interface which was implemented by RemoteWebDriver class. RemoteWebDriver also implements FindBy and some other classes. For now we are going to concentrate on WebDriver and Findby interfaces. All the brwoser specific classes like FirefoxDriver, ChromeDriver,InternetExplorerDriver etc extends RemoteWebDriver. 

Below image represents a simple Webdriver architecture:

Saturday, 30 January 2016

WebDriver - JavaScriptExecutor

What is JavascriptExecutor?
JavascriptExecutor is an interface provided by Selenium which was implemented by all known WebDriver classes ( AndroidDriver, AndroidWebDriver, ChromeDriver, EventFiringWebDriver, FirefoxDriver, HtmlUnitDriver, InternetExplorerDriver, IPhoneDriver, IPhoneSimulatorDriver, RemoteWebDriver, SafariDriver). Using JavascriptExecutor we can inject java script into browsers i.e we can execute the javascript.

What's the use of it?
Sometimes we encounter with scenarios(listed below) where the existing selenium api will not do the job as expected. To handle those scenarios selenium is giving us option to write down our java scripts to perform browser events. Using JavascriptExecutor we can execute java script.
Syntax:
JavascriptExecutor javaScript = (JavascriptExecutor) driver;  
javaScript.executeScript(Script,Arguments);


Sample Scenarios:
To get domain name
JavascriptExecutor javaScript=(JavascriptExecutor) driver;
String domainName =(String) javaScript.executeScript("return document.domain");
To generate an alert
JavascriptExecutor javaScript= (JavascriptExecutor)driver;
JavaScript.executeScript("alert('hello world');");

Click on a webelement

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

Refresh browser

JavascriptExecutor javaScript= (JavascriptExecutor)driver;
driver.executeScript("history.go(0)");

Get title of the page

JavascriptExecutor javaScript= (JavascriptExecutor)driver;
string sText =  javaScript.executeScript("return document.title;").toString();

Perform scroll

  JavascriptExecutor javaScript =(JavascriptExecutor)driver;
  //Verticalscroll - down by 250  pixels
  javaScript.executeScript("window.scrollBy(0,250)");

To scroll to end of the page

javaScript.executeScript("window.scrollBy(0,document.body.scrollHeight)"); 

Mousehover

    JavascriptExecutor javaScript =(JavascriptExecutor)driver;
    //Hover on element whose id is id
    javaScript.executeScript("$(‘#id').hover()"); 

Navigate to a link

JavascriptExecutor javaScript= (JavascriptExecutor)driver;
//Navigate to a link
javaScript.executeScript("window.location = 'https://www.flipkart.com");

To set JavaScript variable value
JavascriptExecutor javaScript = (JavascriptExecutor) driver;
javaScript .executeScript("window.myVar = arguments[0];", "practiceQa");
String myvar = (String) javaScript.executeScript("return window.myVar;");

Working Exmaple
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.Test;

public class JavascriptExecutorExample {

 @Test
 public void testScroll() throws InterruptedException
 {
  WebDriver driver = new FirefoxDriver();
  //Launch flipkart 
  driver.get("http://www.flipkart.com");
  //Search for TV
  WebElement searchContainer = driver.findElement(By.id("fk-top-search-box"));
  searchContainer.sendKeys("TV"); 
  //Click on searchButton
  driver.findElement(By.className("search-bar-submit")).click(); 
  
  //Scroll down the webpage by 2500 pixels
  JavascriptExecutor js = (JavascriptExecutor)driver; 
  js.executeScript("scrollBy(0, 2000)");

  
  boolean noMoreResultsFound=false;
  while(!noMoreResultsFound){
   try{
    (new WebDriverWait(driver, 3)).until (ExpectedConditions.presenceOfElementLocated(By.id("no-more-results")));
    noMoreResultsFound = true;
   }catch(Exception e){
    WebElement viewMore = driver.findElement(By.id("show-more-results"));
    if(!viewMore.isDisplayed()){
     js.executeScript("scrollBy(0, 2000)");
    }else{
     ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", viewMore);
     Thread.sleep(1000);
     viewMore.click();
    }
   }
  }

 }
}

Saturday, 8 August 2015

PracticeQASolutions - TextBoxes

TestData:

UserName: User1
Email: PracticeQA

Solution:

Java:

PracticeQASolutions - Hello Page

Hello Everyone,

In this blog you can find solutions to the examples given in PracticeQA blog. Hope these will help you in learning automation. Please visit PracticeQAEnvironmentSetup Page to learn how to run the solutions provided in this blog. Happy Learning.

Regards,
PracticeQASolutions