Arjun
Arjun

Reputation: 361

creating user defined function for selenium webdriver

I want to create some user defined functions for my webdriver automation code. I tried it, but resulted in failure.

the following is my code

public class snapdeal {

    WebDriver driver= new FirefoxDriver();
    @Test
    public void test() {

             // I want open browser in function 1
        driver.get("http://amazon.in");
        driver.manage().window().maximize();

            // Function 2 for searching     
        driver.findElement(By.xpath("//li[@id='nav_cat_2'")).click();       
        driver.findElement(By.id("twotabsearchtextbox")).sendKeys("Shoes");
        driver.findElement(By.xpath("//input[@class='nav-submit-input']")).click();
        driver.findElement(By.xpath("//h2[@class='a-size-medium s-inline s-access-title a-text-normal' and contains(text(), \"Fbt Men's 8876 Casual Shoes\")]")).click();
               }
         }

How ca i write two functions inside the class?

Upvotes: 1

Views: 11130

Answers (3)

pradeep.k.s deepu
pradeep.k.s deepu

Reputation: 1

Creating user defined function have two different scope

1) Create function with piece of code and call that function whenever u needed it (Which is done above)

2) Second one creating a custom function wrt each controls like edit boxes , radiobutton , check boxes - etc , so by creating this functions u can make better feasible of your automation framework

Upvotes: 0

Anirudh
Anirudh

Reputation: 2326

I think this is like a Hello World for Selenium for you, you could make use defined methods in Java using Junit with the following annotations which can be found here

But as per norms we usually have a @Before method in Junit or @BeforeTest method in testng for setting up the webdriver and the url of AUT, also in your code a couple of xpaths were wrong which were causing the error, Please find below the correct working code with comments:

import java.util.concurrent.TimeUnit;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.safari.SafariDriver;

public class snapdeal {

    public WebDriver driver;

    @Before
    public void setUP()
    {
        // I want open browser in function 1
        driver= new SafariDriver();
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        driver.get("http://amazon.in");
        driver.manage().window().maximize();
    }

    @Test
    public void test() {



        // Function 2 for searching     
        //driver.findElement(By.xpath("//li[@id='nav_cat_2")).click(); //element not needed      
        driver.findElement(By.id("twotabsearchtextbox")).sendKeys("Shoes");
        driver.findElement(By.xpath("//input[@class='nav-submit-input']")).click();
        driver.findElement(By.xpath("//*[@title=\"Fbt Men's 8876 Casual Shoes\"]//h2")).click();
    }
}

The above code works as desired.

Upvotes: 0

Subh
Subh

Reputation: 4424

You were probably trying to nest methods inside test() . It is not possible.

You can use this code below which calls the respective methods in the test(). It works as expected:

public class snapdeal {

    static WebDriver driver= new FirefoxDriver();

    @Test
    public void test() {
        //Method1 for Opening Browser.
        openBrowser();
        // Method2 for searching     
        searchElement();
    }

    public static void openBrowser(){
        driver.get("http://amazon.in");
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    }

    public static void searchElement(){

        driver.findElement(By.xpath("//li[@id='nav_cat_2']")).click(); 

        driver.findElement(By.id("twotabsearchtextbox")).sendKeys("Shoes");

        driver.findElement(By.xpath("//input[@class='nav-submit-input']")).click();

        driver.findElement(By.xpath("//h2[@class='a-size-medium s-inline s-access-title a-text-normal' and contains(text(), \"Fbt Men's 8876 Casual Shoes\")]")).click();
    }

}

Upvotes: 1

Related Questions