Friday, February 15, 2013

How to get auto populated Google search result?


Getting auto populated Google search result



Using below logic you can get the auto populated search result (Google search) for your search word

Logic
driver.get("http://www.google.co.in");  
 driver.findElement(By.name("q")).sendKeys("Test");  
 List<WebElement> autoPopulatedList=driver.findElements(By.cssSelector("tr>td>span"));  
 for(WebElement ele:autoPopulatedList)  
 {  
    System.out.println(e.getText());  
 }  



Example



Output of given code for above search word is 
selenium rc sendkeys
selenium puthon by
selenium
selenium tutorial
selenium  ide
selenium webdriver
selenium rc
selenium ide download
selenium grid
selenium documentation


Regards,
SantoshSarma

Passing parameters to TestCase using testng

Passing parameter using TestNg

  • Some times there is a need to send parameters (like browser name, browser version ..etc).
  • May be you want to run the same test case with different values for same attribute.
You can achieve above cases by using @parameter annotation in testng

Below is the example for running same test cases in different browsers (firefox, chrome) by passing different parameters (browser name, version, profile)

TestNg Class
import org.openqa.selenium.WebDriver;  
   import org.testng.annotations.Parameters;  
   import org.testng.annotations.Test;  
   import org.testng.annotations.BeforeMethod;  
   import org.testng.annotations.AfterMethod;  
   import org.testng.annotations.BeforeClass;  
   import org.testng.annotations.AfterClass;  
   import org.testng.annotations.BeforeTest;  
   import org.testng.annotations.AfterTest;  
   public class ExampleTestCase   
   {  
     private static WebDriver driver;
     @Parameters({"browser,version"})
     @BeforeClass
     public void beforeClass(String browser,String version,String profile)
     {
          driver=getDriverInstance(browser,version,profile);
     }
     @BeforeTest
     public void beforeTest()
     {
     }  
     @Test
     public void f()
     {
          //your test code here
     }
   @AfterTest
    public void afterTest()
    {
    }
    @AfterClass
    public void afterClass()
    {
        driver.quit();
    }
}

getDriverInstance method implimentation
public static WebDriver getDriverInstance(String browser,String version,String profile)  
  {  
     WebDriver driver=null;  
     if(browser.equals("firefox"))  
     {  
       DesiredCapabilities capability = DesiredCapabilities.firefox();  
       capability.setVersion(version);
       capability.setCapability(FirefoxDriver.PROFILE, profile);
       driver = new FirefoxDriver(capability);  
     }  
     else if(browser.equals("chrome"))  
     {  
         DesiredCapabilities capability = DesiredCapabilities.chrome();  
         capability.setVersion(version);  
         driver = new ChromeDriver(capability);  
     }  
     return driver;  
  }  

TestNg Suite
<?xml version="1.0" encoding="UTF-8"?>  
   <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">  
   <suite thread-count="2" name=MyTestSuite" parallel="tests">  
       <test name="RunInFirefox" preserve-order="false">
          <parameter name="browser" value="firefox">
          <parameter name="version" value="8"/>
          <parameter name="profile" value="default">
                <classes preserve-order="true">  
                      <class name="com.test.TestCase1"/>  
                      <class name="com.test.TestCase2"/>  
                      <class name="com.test.TestCase3"/>  
                </classes>  
       </test>  
       <test name="RunInChrome" preserve-order="false">
          <parameter name="browser" value="chrome">
          <parameter name="version" value="21"/>  
               <classes preserve-order="true">  
                    <class name="com.test.TestCase1"/>  
                    <class name="com.test.TestCase2"/>  
                    <class name="com.test.TestCase3"/>  
               </classes>  
        </test>  
</suite>  



Related Topics
Running Junit Cases from command prompt
Upload photo in facebook using webdriver

Friday, February 1, 2013

Uploading photo in facebook using WebDriver

Automate Facebook with WebDriver
Uploading photo in facebook

driver.get("http://www.facebook.com");  
  driver.findElement(By.id("email")).clear();  
  driver.findElement(By.id("email")).sendKeys("*******@gmail.com");  
  driver.findElement(By.id("pass")).clear();  
  driver.findElement(By.id("pass")).sendKeys("*******");  
  driver.findElement(By.cssSelector("#loginbutton > input")).click();  
  driver.findElement(By.linkText("Facebook")).click();  
  driver.findElement(By.linkText("Add Photos/Video")).click();  
  driver.findElement(By.xpath("//div[text()='Upload Photos/Video']/
                           following-sibling::div/input")).sendKeys("C:\\MyPhoto.jpg");  

Tuesday, January 29, 2013

WebDriver waits


Web application automation is depends on so many factors. Browser, network speed ...etc. We should write unquie code for running in all environments. For achieveing that we need to wait for WebElements before performing any operation on that.

Here we will see some built-in waits in WebDriver.

implicitlyWait

1WebDriver driver = new FirefoxDriver();
2driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
3driver.get("http://www.google.co.in");
4WebElement myElement = driver.findElement(By.id("someId"));
Implicit waits are basically your way of telling WebDriver the latency that you want to see if specified web element is not present that WebDriver looking for. (Click here for more information). This will be useful when certain elements on the webpage will not be available immediately and needs some time to load.

pageLoadTimeout

1driver.manage().timeouts().pageLoadTimeout(30, SECONDS);
Sets the amount of time to wait for a page load to complete before throwing an error. If the timeout is negative, page loads can be indefinite.

setScriptTimeout

1driver.manage().timeouts().setScriptTimeout(30,SECONDS);

Sets the amount of time to wait for an asynchronous script to finish execution before throwing an error.


Regards,
SantoshSarma

Monday, January 28, 2013

isTextPresent() ? In WebDriver

While automation web applications in some places we want/need to check particular text is present or not.

In WebDriver (Selenium 2), there is no predefined method for checking this. (In Selenium-RC isTextPresent("text") built-in method exist ) So we need to implement our own method to achieve this.


Let us consider you are searching for text "WebDriver"



boolean isTextPrest=false;

Method-1
 isTextPrest=driver.findElement(By.tagName("body")).getText().contains("WebDriver");  

Method-2
 isTextPrest=driver.findElement(By.xpath("//*[contains(.,'WebDriver')]")).isDisplayed();  

Method-3
 Selenium sel=new WebDriverBackedSelenium(driver, "");  
 isTextPresent=sel.isTextPresent("WebDriver");  


FYI : Method-1 will take more time than remaining (comparatively)

Happy Coding :)


Regards,
SantoshSarma

XPath indexing

Q : What does //td[2] mean?
A : All td elements in that page (document), that are second child of their parent.


Q : Will //td[2] return only one element?
A :  No, there may be many such elements. (second child td of their parent)


 if you've any doubts regarding this xpath indexing post it in comments section.



Related Topics
How to write xpath?
Locating elements using xpath




Tuesday, January 22, 2013

Finding elements within iframe using firebug


Firebug Tip

Firebug command line allows executing JavaScript expressions within context of the current page. Firebug also provides a set of built in APIs and one of them is cd().

Lets consider below iframe

                <iframe id="testID" name="testName" src="iframe.html" />


  • cd(document.getElementById("testID").contentWindow); switch to a frame by ID
  • cd(window.frames[0]); switch to the first frame in the list of frames
  • cd(window.frames["testName"]); switch to a frame using by name
  • cd(window.top); switching back to the top level window


Happy Coding .. :)


Regards,
SantoshSarma