Sunday, March 20, 2016

Java : Program to draw an eqilateral triangle using input string

Program to draw an eqilateral triangle using input string

Logic :

      D        1 -character
    Dee       3 - charracters
  Deepa      5
Deepaks     7

1. Increament by 2
2.
    StringUtils.leftPad("bat", 5," ")  = "  bat"
    StringUtils.leftPad("bat", 4," ")  = " bat"
    StringUtils.leftPad("bat", 3," ")  = "bat"


Program :

import org.apache.commons.lang3.StringUtils;

    public static void main(String [] args){
        String str="Deepak";
        String sTemp=null;
        StringBuffer sBuff=new StringBuffer();
       
        if(str.length/2() !=0)
            str=str+"s";       

        for(int i=1;i<=str.length();i=i+2){
             sTemp=StringUtils.mid(str, 0, i);
             sTemp=StringUtils.leftPad(sTemp, str.length()," "); // StringUtils.leftPad("bat", 5)  = "  bat"
             sBuff.append(sTemp+"\n");
            }

        JOptionPane.showMessageDialog(null,sBuff.toString());

    }


Output :

      D
    Dee
  Deepa
Deepaks





Friday, March 18, 2016

Selenium : Page Object Model (By) VS Page Factory (@FindBy)


 Page Object Model (By) VS Page Factory (@FindBy)


1) Page Object Model

- Page Object Model - Initialize all object locators separately using "By"

 Code Here :
class starttest{
     @Test
      public void LoginTest() {    
            By usernameField = By.xpath("//*[text()=login_login_username]")
            By passwordField = By.name("//*[text()=login_login_password]")
            By loginButton = By.xpath("//*[text()=login_submit]");
          
            WebDriver driver=new FireFoxDriver();
            driver.get("http://some-login-page");
          
            driver.findElement(usernameField).sendKeys("my name");
            driver.findElement(passwordField).sendKeys("my password");
            driver.findElement(loginButton).click();
      }
  }

 2) Page Factory (@FindBy and PageFactory.initElements(driver, .class))

 1) @FindBy can accept tagName, partialLinkText, name, linkText, id, css, className, xpath as attributes.

2)  @FindBy(xpath="//*[text()=login_login_username]")
    private WebElement usernameField;
 

Is  Same as 

WebElement usernameField=By.xpath("//*[text()=login_login_username]")

3)
  @FindBy(xpath="//*[@id='']")    is same as     //@FindBy(how = How.xpath, using ="//*[@id='']")
 @FindBy(name="username")        is same as     //@FindBy(how = How.NAME, using = "username")
 @FindBy(className="radio")       is same as       //@FindBy(how = How.CLASSNAME, using = "radio")

 Code Here :


class starttest{

     @Test
      public void LoginTest() {   
        WebDriver driver=new FireFoxDriver();
        driver.get("http://some-login-page");
       
        LoginPage loginPage=PageFactory.initElements(driver, LoginPage.class); //Initialize Login Page     
        loginPage.login("student1","Testing1");
      }
  }


 public class LoginPage {

    @FindBy(xpath="//*[text()=login_login_username]")
    private WebElement usernameField;   \\
By usernameField = By.xpath("//*[text()=login_login_username]")   
   

 @FindBy(xpath="//*[text()=login_login_password]")
    private WebElement passwordField;   
   
    @FindBy(xpath="//*[text()=login_submit]")
    private WebElement loginButton;        

   
    public void login(String usernametext,String passwordtext)    {
        usernameField.sendKeys(usernametext);
        passwordField.sendKeys(passwordtext);
        loginButton.click();
    }   
}

Thursday, March 17, 2016

Selenium : How to Create Xpath


Selenium : How to Create Xpath

Target URL: www.mouthshut.com
Target Web element: Signup button, Login Button
Tools used:
·         FireBug : To formulate Xpath
·         Selenium Ide : To Test the formulated Xpath
Things to remember:-
1.       Target page should be open is FireFox
2.       Selenium ide and Firebug  should be open
3.       The formulated Xpath will go into “Target” field of Selenium IDE.
4.       All Xpath which go into IDE start with “xpath=//”
5.       The page usually start with <body> , therefore the foremost parent will always be “//Body” while writing Full Path
6.       Html Page may be like :
<body id=”aaaaa”>

   <div id=”bbbbb”>

   <div id=”cccc”>

          <a id=”dddd” class=”1111”>

          <ul id=”eeee”  target=”2222” href=”5555”>

  <div id=”ffff”>
               
Syntax in IDE:
Xpath=//branch/branch [ @property=’value’ or contains ( @property, “value”) ]
In the above example :
1.   Branch or Nodebody , div , a , ul ,img
Note : Each Node value will have  many properties and many values .Therefore always start with a node value or "*" along with its relate property and value (Ex ://a[@target='_new']  or //*[@target='_new']  )
2.   Propertyid , class , target
3.   Valueaaaa , bbbb , cccc , dddd , 1111 , 2222 , eeee , ffff ,5555

Syntax in Selenium (Eclipse Java) 
   ( Note -"Syntax in Selenium IDE" is only used to create Xpath and the below syntax is the usage of Xpath created using IDE )
Syntax :
WebElement oObject_Name=Driver_Object.findElement(By.xpath("Created Xpath Goes here ,starting from '//'"));
Example : 
oDriver=new FirefoxDriver();
oDriver.get("https://URL_Here");
WebElement oObject=oDriver.findElement(By.xpath("//branch/branch [ @property=’value’ or contains ( @property, “value”) ]"));

1.     Using Full Path
 xpath=//body/form/div[7]/div/div[2]/div/div[2]/ul/li/a
(The page usually start with <body> , therefore the foremost parent will always be “//Body” while writing Full Path )
Selenium Code :
 oDriver=new FirefoxDriver();
oDriver.get("https://www.mouthshut.com");
oTitle=oDriver.findElement(By.xpath("//body/form/div[7]/div/div[2]/div/div[2]/ul/li/a"));
2.     Using Last()
xpath=//body/form/div[7]/div/div[2]/div/div[last()]/ul/li/a
3.     Using Full Path+ @ attribute
·         xpath=//body/form/div[7]/div/div[2]/div/div[last()]/ul/li/a[@class='']
·         xpath=//body/form/div[7]/div/div[2]/div/div[last()]/ul/li/a[@style='background-color: transparent;']
(For Login Button)
xpath=//body/form/div[7]/div/div[2]/div/div[last()]/ul/li[2]/a[@target='_new']
4.      Using only @ attribute      (For Login Button)
xpath=//a[@target='_new']
(Which is equivalent to
xpath=//body/form/div[7]/div/div[2]/div/div[last()]/ul/li[2]/a[@target='_new']    )
5.     Using Descendants
xpath=//div[@class='new-menu']/descendant::div[@class='fr']
6.     Using keywords
xpath=//a[contains(@href, "javascript:__doPostBack(")]
xpath=//a[contains(@id, "ctl00_ctl00_ctl00_ContentPlaceHolderHeader_ContentPlaceHolderFooter_litSignUp")]



7.     And Operation
xpath=//a[contains(@id, "ctl00") and contains(@href,"javascript:_")]


8.     using position()
xpath=//div[@class='tdltaln']/div[position()=2]/ul/li


9.     Using starts-with keyword
xpath=//a[starts-with(@href, "https://graph.facebook.com")]
10. OR (|) condition
xpath=//a[@id='ctl00_ctl00_ctl00_ContentPlaceHolderHeader_ContentPlaceHolderFooter_litSignUpLink' or contains(@href,"javascript:__doPostBack")]

 xpath=//a[contains(@id,"ctl00_ctl00_ctl00_") or contains(@href,"javascript:__doPostBack") ]


 xpath=//a[contains(@href,"javascript:__doPostBack") or contains(@id,"ctl00_ctl00_ctl00_")]

11. Going 1 step back  
     Traversing from child to parent use    "/.."
12. Going back multiple steps or reverse tracing ( ancestor:: )
Ex :If user "ancestor::div" , then all the ancestor elements are highlighted with "div" node

 Back Trace to first occurrence of div element 
 //*[text()='Biological Sciences']/ancestor::div[1]
13. Going to specfic child element from parent node:( child:: )
Simialr to just "/ut[1]"
//*[text()='Biological Sciences']/ancestor::div[1]/child::ul[1]
 
14. Wild Card “*”
xpath=//*[@id="ctl00_ctl00_ctl00_ContentPlaceHolderHeader_ContentPlaceHolderFooter_litSignUpLink"]
15. Nth element
xpath=//ul[@class='login']/*[1]


16. No child
xpath=//img[count(*)=0]  

17. Last Second or Last But one 
xpath=//div[@class='dvaligncenter']/div[last()-1]//a

Examples for Xpath
xpath=xpathExpression: Locate an element using an XPath expression.

1. xpath=//img[@alt='The image alt text']
2. xpath=//table[@id='table1']//tr[4]/td[2]
3. xpath=//a[contains(@href,'#id1')]
4. xpath=//a[contains(@href,'#id1')]/@class
5. xpath=(//table[@class='stylee'])//th[text()='theHeaderText']/../td
6. xpath=//input[@name='name2' and @value='yes']
7. xpath=//*[text()="right"]
8. xpath=//*[@id='view']/*[not(@selected='selected')][1]
9. xpath=//*[text()='Biological Sciences']/ancestor::div[1]
10. xpath=.//*[local-name(.)='th' or local-name(.)='td']
Xpath summary
1.Path
    1. Full
    2. Full+attribute
    3. Attribute
    4. Wild Card(*)
    5. Recent ancestor "/.. "
    6. //a[6]
    7. div[3][contains(@id,'dvheader')] -goto 3rd element and fetch if it has dvheader similar to AND
    2.Functions
    1.  position
    1. [Last()]  //[Last[]-1]
    2. [Position()= 42]
    3. count
    1. text
    1. [starts-with(@,””)] -- Used For Dynamic Elements
    2. [contains(@,””)] -- Used For Dynamic Elements
    3. [text()=””] --text
    3.Logical
    1. And
    2. or
    3. not


  1. Navigation
  2.  Descendants::div[1]



  3. ancestor::div[1]
  4. child::div[1]

                   
    Ref:
                    http://software-testing-tutorials-automation.blogspot.in/2013/06/xpath-tutorials-identifying-xpath-for.html