Skip to main content
Bumped by Community user
Bumped by Community user
Bumped by Community user
Bumped by Community user
Bumped by Community user
added 250 characters in body
Source Link
Antony
  • 121
  • 1
  • 5

Excuse please review my code. I am working in Selenium with page object design pattern, without any Selenium frameworksautomation testing. I I did a sampleautomation testing for my login page. I am using selenium with page object pattern. I wrote here my code. I am using java language and I am keeping my test data in a property file:

baseurl=http://
nam=geo,sony,geo,geogr,ge
pas=1234,123,56,345,12

There is pageobject package to identify the locators.

package pageobject;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;

/**
 * Created by naveen on 6/3/17.
 */


public class HomePage {
    @FindBy(how= How.NAME, using = "username")
    WebElement username;
    @FindBy(how=How.NAME, using = "password")
    WebElement password;
    @FindBy(how=How.XPATH, using="//*[@id=\'login-container\']/form/div[3]/div/p/input[1]" )
    WebElement button;

    //enter  username
    public void  userLogin(String user, String pass)
    {
        username.sendKeys(user);
        password.sendKeys(pass);
        button.click();
    }
}

what should I need to improve ? and steps package for initializing the elements for locators class.

package steps;

import org.openqa.selenium.support.PageFactory;
import pageobject.HomePage;
import util.DriverManager;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
 * Created by naveen on 6/3/17.
 */
public class LoginSteps extends DriverManager {

    public LoginSteps() throws IOException {
    }

    //    public HomePage Login(String nam, String pas) {
    public HomePage Login() {
        String nam, pas;
        //  SamleFileInput();

        String[] namArray = prop.getProperty("nam").split(",");
        String[] pasArray = prop.getProperty("pas").split(",");

        HomePage homePageObj = PageFactory.initElements(DriverManager.driver, HomePage.class);

        String resultData;
        String status;
//        BufferedWriter writer = null;

        String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
        File logFile = new File(timeLog + ".txt");

//        writer = new BufferedWriter(new FileWriter(logFile))

//        homePageObj.userLogin(nam,pas);
        int len = namArray.length;
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(logFile))) {
            for (int i = 0; i < len; i++) {
                nam = namArray[i];
                pas = pasArray[i];

                homePageObj.userLogin(nam, pas);


                if (driver.getPageSource().contains("Hello Sony George")) {
                    status = "Success";
                } else {
                    status = "Failed";
                }

                resultData = "User: " + nam + " Pwd: " + pas + "  Status: " + status+"\n";
                System.out.println(resultData);


                writer.append(resultData);


            }
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close the writer regardless of what happens...

            } catch (Exception e) {
            }


//        homePageObj.userLogin(nam,pas);

            return homePageObj;
        }
    }
}

util packageIt will help me to initilize the webdrivergo to next step.

    package pageobject;
    
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.support.FindBy;
    import org.openqa.selenium.support.How;
    
    /**
     * Created by naveen on 6/3/17.
     */
    
    
    public class HomePage {
        @FindBy(how= How.NAME, using = "username")
        WebElement username;
        @FindBy(how=How.NAME, using = "password")
        WebElement password;
        @FindBy(how=How.XPATH, using="//*[@id=\'login-container\']/form/div[3]/div/p/input[1]" )
        WebElement button;
    
        //enter  username
        public void  userLogin(String user, String pass)
        {
            username.sendKeys(user);
            password.sendKeys(pass);
            button.click();
        }
    }



    package steps;
    
    import org.openqa.selenium.support.PageFactory;
    import pageobject.HomePage;
    import util.DriverManager;
    import java.io.IOException;
    /**
     * Created by naveen on 6/3/17.
     */
    public class LoginSteps {
    
        public LoginSteps() throws IOException {
        }
    
        public HomePage Login(String uname, String pwd) {
    
    
            HomePage homePageObj = PageFactory.initElements(DriverManager.driver, HomePage.class);
    
            homePageObj.userLogin(uname, pwd);
    
            return homePageObj;
            }
        }


package util;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

/**
 * Created by naveen on 6/3/17.
 */
public class DriverManager
{
    public static WebDriver driver;
    String baseUrl;
    public Properties prop;

    public DriverManager() throws IOException {
        // Get baseUrl property
        File file = new File("config.properties");
        FileInputStream fileInput = null;
        try {
            fileInput = new FileInputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        //load properties file
        prop = new Properties();
        try {
            prop.load(fileInput);
        } catch (IOException e) {
            e.printStackTrace();
        }




        // Start driver
        System.setProperty("webdriver.chrome.driver", "/home/naveen/chromedriver");
        driver = new ChromeDriver();

        driver.manage().window().maximize();
        baseUrl = prop.getProperty("baseurl");
        driver.get(baseUrl);

    }
}


package login;

import org.openqa.selenium.By;
import org.testng.Assert;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import steps.LoginSteps;
import util.DriverManager;

import java.io.IOException;



public class LoginTest extends DriverManager
{

    LoginSteps lSteps;

    int inputDataFlag = 0;
    // 0 -> Invalid i/p
    // 1 -> Valid inputs


    String[] successMsg;
    int successCounter = 0;

    String successText;

    public LoginTest() throws IOException {
        lSteps = new LoginSteps();
        successMsg = prop.getProperty("loginSuccess").split(",");
    }



//    Invalid Credential as input
    @Test(dataProvider = "setData")
    public void initDriver(String name, String password) {
        //Arrange
        lSteps.Login(name, password);
        Assert.assertFalse(driver.getPageSource().contains("Hello Sony George"), "Valid credentials");
    }
     //   valid Credential as input
    @Test(priority = 1,dataProvider = "setData")
    public void init(String name,String password)
    {
        lSteps.Login(name,password);
        Assert.assertTrue(driver.getPageSource().contains(successMsg[successCounter]), "Valid credentials");


//logout
        if(driver.getPageSource().contains(successMsg[successCounter])){
            driver.findElement(By.xpath("//*[@id=\'rightMenu\']/li/a")).click();
            driver.findElement(By.linkText("Logout")).click();
            successCounter++;
        }

    }

    @DataProvider
    Object[][] setData() {

        Object[][] dataValues = getValues();

        return dataValues;
    }




    private String[][] getValues(){

        String[] namArray = new String[0];
        String[] pasArray = new String[0];

        if(inputDataFlag == 0){
            namArray = prop.getProperty("invalidnames").split(",");
            pasArray = prop.getProperty("invalidPwd").split(",");
        }else if(inputDataFlag == 1){
            namArray = prop.getProperty("validnames").split(",");
            pasArray = prop.getProperty("validPwd").split(",");
        }


        String nam, pas;

        int len = namArray.length;

        String[][] dataValues = new String[len][2];

        for (int i = 0; i < len; i++) {
            nam = namArray[i];
            pas = pasArray[i];

            dataValues[i][0] = nam;
            dataValues[i][1] = pas;

        }

        inputDataFlag++;

        return dataValues;

    }

    @AfterSuite
    public void close() {
    driver.close();
    } 

}

Here is the login test itself.property file

import org.testng.Assert;
import org.testng.annotations.Test;
import pageobject.HomePage;
import steps.LoginSteps;

import java.io.IOException;

import static util.DriverManager.driver;

/**
 * Created by naveen on 6/3/17.
 */
public class LoginTest
{
    public LoginTest() throws IOException {
    }



    @Test
    public void initDriver()invalidnames throws= InterruptedExceptiongeo, IOException {
        //Arrange
     sony,geo,geogr,geoson,geo,"",   try {sony
     HomePage pageinvalidPwd = new LoginSteps().Login();
           1234,123,56,345,123456789,123,"", Assert.assertTrue(driver.getPageSource().contains("Hello Sony George"));

123
        } catch (IOException#Valid e)Test {case
          validnames = e.printStackTrace();somevalidnames
      validPwd = }somevalidpassword

      loginSuccess = //AppointmentPageHello page1=newSony Appointmentsteps().Valid(prop.getProperty("num"),prop.getProperty("usernam"),prop.getProperty("ema"),prop.getProperty("cliid"),prop.getProperty("strdate")George,prop.getProperty("cat"));


  Hello Naveen,Hello }


}Juswin

Is it a good practice to keep the looping statement for test data in loginsteps ? whether I have a user register page, so I think it will more shuffled code. so Is it possible to keep the looping statement for all common class files to put in drivermanager ? whats your opinion ?

I am working in Selenium with page object design pattern, without any Selenium frameworks. I did a sample login page. I am keeping my test data in a property file:

baseurl=http://
nam=geo,sony,geo,geogr,ge
pas=1234,123,56,345,12

There is pageobject package to identify the locators.

package pageobject;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;

/**
 * Created by naveen on 6/3/17.
 */


public class HomePage {
    @FindBy(how= How.NAME, using = "username")
    WebElement username;
    @FindBy(how=How.NAME, using = "password")
    WebElement password;
    @FindBy(how=How.XPATH, using="//*[@id=\'login-container\']/form/div[3]/div/p/input[1]" )
    WebElement button;

    //enter  username
    public void  userLogin(String user, String pass)
    {
        username.sendKeys(user);
        password.sendKeys(pass);
        button.click();
    }
}

and steps package for initializing the elements for locators class.

package steps;

import org.openqa.selenium.support.PageFactory;
import pageobject.HomePage;
import util.DriverManager;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
 * Created by naveen on 6/3/17.
 */
public class LoginSteps extends DriverManager {

    public LoginSteps() throws IOException {
    }

    //    public HomePage Login(String nam, String pas) {
    public HomePage Login() {
        String nam, pas;
        //  SamleFileInput();

        String[] namArray = prop.getProperty("nam").split(",");
        String[] pasArray = prop.getProperty("pas").split(",");

        HomePage homePageObj = PageFactory.initElements(DriverManager.driver, HomePage.class);

        String resultData;
        String status;
//        BufferedWriter writer = null;

        String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
        File logFile = new File(timeLog + ".txt");

//        writer = new BufferedWriter(new FileWriter(logFile))

//        homePageObj.userLogin(nam,pas);
        int len = namArray.length;
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(logFile))) {
            for (int i = 0; i < len; i++) {
                nam = namArray[i];
                pas = pasArray[i];

                homePageObj.userLogin(nam, pas);


                if (driver.getPageSource().contains("Hello Sony George")) {
                    status = "Success";
                } else {
                    status = "Failed";
                }

                resultData = "User: " + nam + " Pwd: " + pas + "  Status: " + status+"\n";
                System.out.println(resultData);


                writer.append(resultData);


            }
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close the writer regardless of what happens...

            } catch (Exception e) {
            }


//        homePageObj.userLogin(nam,pas);

            return homePageObj;
        }
    }
}

util package to initilize the webdriver

package util;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

/**
 * Created by naveen on 6/3/17.
 */
public class DriverManager
{
    public static WebDriver driver;
    String baseUrl;
    public Properties prop;

    public DriverManager() throws IOException {
        // Get baseUrl property
        File file = new File("config.properties");
        FileInputStream fileInput = null;
        try {
            fileInput = new FileInputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        //load properties file
        prop = new Properties();
        try {
            prop.load(fileInput);
        } catch (IOException e) {
            e.printStackTrace();
        }




        // Start driver
        System.setProperty("webdriver.chrome.driver", "/home/naveen/chromedriver");
        driver = new ChromeDriver();

        driver.manage().window().maximize();
        baseUrl = prop.getProperty("baseurl");
        driver.get(baseUrl);
    }
}

Here is the login test itself.

import org.testng.Assert;
import org.testng.annotations.Test;
import pageobject.HomePage;
import steps.LoginSteps;

import java.io.IOException;

import static util.DriverManager.driver;

/**
 * Created by naveen on 6/3/17.
 */
public class LoginTest
{
    public LoginTest() throws IOException {
    }



    @Test
    public void initDriver() throws InterruptedException, IOException {
        //Arrange
        try {
     HomePage page = new LoginSteps().Login();
            Assert.assertTrue(driver.getPageSource().contains("Hello Sony George"));


        } catch (IOException e) {
            e.printStackTrace();
        }

        //AppointmentPage page1=new Appointmentsteps().Valid(prop.getProperty("num"),prop.getProperty("usernam"),prop.getProperty("ema"),prop.getProperty("cliid"),prop.getProperty("strdate"),prop.getProperty("cat"));


    }


}

Is it a good practice to keep the looping statement for test data in loginsteps ? whether I have a user register page, so I think it will more shuffled code. so Is it possible to keep the looping statement for all common class files to put in drivermanager ? whats your opinion ?

Excuse please review my code. I am working in automation testing. I did a automation testing for my login page. I am using selenium with page object pattern. I wrote here my code. I am using java language and I am keeping my test data in property file. what should I need to improve ? and It will help me to go to next step.

    package pageobject;
    
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.support.FindBy;
    import org.openqa.selenium.support.How;
    
    /**
     * Created by naveen on 6/3/17.
     */
    
    
    public class HomePage {
        @FindBy(how= How.NAME, using = "username")
        WebElement username;
        @FindBy(how=How.NAME, using = "password")
        WebElement password;
        @FindBy(how=How.XPATH, using="//*[@id=\'login-container\']/form/div[3]/div/p/input[1]" )
        WebElement button;
    
        //enter  username
        public void  userLogin(String user, String pass)
        {
            username.sendKeys(user);
            password.sendKeys(pass);
            button.click();
        }
    }



    package steps;
    
    import org.openqa.selenium.support.PageFactory;
    import pageobject.HomePage;
    import util.DriverManager;
    import java.io.IOException;
    /**
     * Created by naveen on 6/3/17.
     */
    public class LoginSteps {
    
        public LoginSteps() throws IOException {
        }
    
        public HomePage Login(String uname, String pwd) {
    
    
            HomePage homePageObj = PageFactory.initElements(DriverManager.driver, HomePage.class);
    
            homePageObj.userLogin(uname, pwd);
    
            return homePageObj;
            }
        }


package util;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

/**
 * Created by naveen on 6/3/17.
 */
public class DriverManager
{
    public static WebDriver driver;
    String baseUrl;
    public Properties prop;

    public DriverManager() throws IOException {
        // Get baseUrl property
        File file = new File("config.properties");
        FileInputStream fileInput = null;
        try {
            fileInput = new FileInputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        //load properties file
        prop = new Properties();
        try {
            prop.load(fileInput);
        } catch (IOException e) {
            e.printStackTrace();
        }




        // Start driver
        System.setProperty("webdriver.chrome.driver", "/home/naveen/chromedriver");
        driver = new ChromeDriver();

        driver.manage().window().maximize();
        baseUrl = prop.getProperty("baseurl");
        driver.get(baseUrl);

    }
}


package login;

import org.openqa.selenium.By;
import org.testng.Assert;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import steps.LoginSteps;
import util.DriverManager;

import java.io.IOException;



public class LoginTest extends DriverManager
{

    LoginSteps lSteps;

    int inputDataFlag = 0;
    // 0 -> Invalid i/p
    // 1 -> Valid inputs


    String[] successMsg;
    int successCounter = 0;

    String successText;

    public LoginTest() throws IOException {
        lSteps = new LoginSteps();
        successMsg = prop.getProperty("loginSuccess").split(",");
    }



//    Invalid Credential as input
    @Test(dataProvider = "setData")
    public void initDriver(String name, String password) {
        //Arrange
        lSteps.Login(name, password);
        Assert.assertFalse(driver.getPageSource().contains("Hello Sony George"), "Valid credentials");
    }
     //   valid Credential as input
    @Test(priority = 1,dataProvider = "setData")
    public void init(String name,String password)
    {
        lSteps.Login(name,password);
        Assert.assertTrue(driver.getPageSource().contains(successMsg[successCounter]), "Valid credentials");


//logout
        if(driver.getPageSource().contains(successMsg[successCounter])){
            driver.findElement(By.xpath("//*[@id=\'rightMenu\']/li/a")).click();
            driver.findElement(By.linkText("Logout")).click();
            successCounter++;
        }

    }

    @DataProvider
    Object[][] setData() {

        Object[][] dataValues = getValues();

        return dataValues;
    }




    private String[][] getValues(){

        String[] namArray = new String[0];
        String[] pasArray = new String[0];

        if(inputDataFlag == 0){
            namArray = prop.getProperty("invalidnames").split(",");
            pasArray = prop.getProperty("invalidPwd").split(",");
        }else if(inputDataFlag == 1){
            namArray = prop.getProperty("validnames").split(",");
            pasArray = prop.getProperty("validPwd").split(",");
        }


        String nam, pas;

        int len = namArray.length;

        String[][] dataValues = new String[len][2];

        for (int i = 0; i < len; i++) {
            nam = namArray[i];
            pas = pasArray[i];

            dataValues[i][0] = nam;
            dataValues[i][1] = pas;

        }

        inputDataFlag++;

        return dataValues;

    }

    @AfterSuite
    public void close() {
    driver.close();
    } 

}

property file

invalidnames = geo,sony,geo,geogr,geoson,geo,"",    sony
invalidPwd = 1234,123,56,345,123456789,123,"",  123
#Valid Test case
validnames = somevalidnames
validPwd = somevalidpassword

loginSuccess = Hello Sony George,Hello Naveen,Hello Juswin
deleted 119 characters in body; edited tags; edited title; added 2 characters in body; edited title
Source Link
200_success
  • 145.7k
  • 22
  • 191
  • 481

Is it a good practice to keep the looping statement Testing multiple logins using Selenium listed in loginsteps class?a property file

I am working in seleniumSelenium with page object design pattern, without any Selenium frameworks. I am keeping my test data in property file. I did a sample login page. InI am keeping my below code. there is pageobject package for identify the locators and steps package for initialize the elements for locators class. util package for initilize the webdriver,test data in a property file. and logintest file for testing. Here is my code.:

package pageobject;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;

/**
 * Created by naveen on 6/3/17.
 */


public class HomePage {
    @FindBy(how= How.NAME, using = "username")
    WebElement username;
    @FindBy(how=How.NAME, using = "password")
    WebElement password;
    @FindBy(how=How.XPATH, using="//*[@id=\'login-container\']/form/div[3]/div/p/input[1]" )
    WebElement button;

    //enter  username
    public void  userLogin(String user, String pass)
    {
        username.sendKeys(user);
        password.sendKeys(pass);
        button.click();
    }
}

package steps;

import org.openqa.selenium.support.PageFactory;
import pageobject.HomePage;
import util.DriverManager;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
 * Created by naveen on 6/3/17.
 */
public class LoginSteps extends DriverManager {

    public LoginSteps() throws IOException {
    }

    //    public HomePage Login(String nam, String pas) {
    public HomePage Login() {
        String nam, pas;
        //  SamleFileInput();

        String[] namArray = prop.getProperty("nam").split(",");
        String[] pasArray = prop.getProperty("pas").split(",");

        HomePage homePageObj = PageFactory.initElements(DriverManager.driver, HomePage.class);

        String resultData;
        String status;
//        BufferedWriter writer = null;

        String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
        File logFile = new File(timeLog + ".txt");

//        writer = new BufferedWriter(new FileWriter(logFile))

//        homePageObj.userLogin(nam,pas);
        int len = namArray.length;
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(logFile))) {
            for (int i = 0; i < len; i++) {
                nam = namArray[i];
                pas = pasArray[i];

                homePageObj.userLogin(nam, pas);


                if (driver.getPageSource().contains("Hello Sony George")) {
                    status = "Success";
                } else {
                    status = "Failed";
                }

                resultData = "User: " + nam + " Pwd: " + pas + "  Status: " + status+"\n";
                System.out.println(resultData);


                writer.append(resultData);


            }
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close the writer regardless of what happens...

            } catch (Exception e) {
            }


//        homePageObj.userLogin(nam,pas);

            return homePageObj;
        }
    }
}

package util;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

/**
 * Created by naveen on 6/3/17.
 */
public class DriverManager
{
    public static WebDriver driver;
    String baseUrl;
    public Properties prop;

    public DriverManager() throws IOException {
        // Get baseUrl property
        File file = new File("config.properties");
        FileInputStream fileInput = null;
        try {
            fileInput = new FileInputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        //load properties file
        prop = new Properties();
        try {
            prop.load(fileInput);
        } catch (IOException e) {
            e.printStackTrace();
        }




        // Start driver
        System.setProperty("webdriver.chrome.driver", "/home/naveen/chromedriver");
        driver = new ChromeDriver();

        driver.manage().window().maximize();
        baseUrl = prop.getProperty("baseurl");
        driver.get(baseUrl);
    }
}

import org.testng.Assert;
import org.testng.annotations.Test;
import pageobject.HomePage;
import steps.LoginSteps;

import java.io.IOException;

import static util.DriverManager.driver;

/**
 * Created by naveen on 6/3/17.
 */
public class LoginTest
{
    public LoginTest() throws IOException {
    }



    @Test
    public void initDriver() throws InterruptedException, IOException {
        //Arrange
        try {
     HomePage page = new LoginSteps().Login();
            Assert.assertTrue(driver.getPageSource().contains("Hello Sony George"));


        } catch (IOException e) {
            e.printStackTrace();
        }

        //AppointmentPage page1=new Appointmentsteps().Valid(prop.getProperty("num"),prop.getProperty("usernam"),prop.getProperty("ema"),prop.getProperty("cliid"),prop.getProperty("strdate"),prop.getProperty("cat"));


    }


}
property file

baseurl=http://
nam=geo,sony,geo,geogr,ge
pas=1234,123,56,345,12

Is it a good practiceThere is pageobject package to keepidentify the looping statement for test data in loginsteps ? whether I have a user register page, so I think it will more shuffled codelocators. so Is it possible to keep the looping statement for all common class files to put in drivermanager ? whats your opinion ?

package pageobject;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;

/**
 * Created by naveen on 6/3/17.
 */


public class HomePage {
    @FindBy(how= How.NAME, using = "username")
    WebElement username;
    @FindBy(how=How.NAME, using = "password")
    WebElement password;
    @FindBy(how=How.XPATH, using="//*[@id=\'login-container\']/form/div[3]/div/p/input[1]" )
    WebElement button;

    //enter  username
    public void  userLogin(String user, String pass)
    {
        username.sendKeys(user);
        password.sendKeys(pass);
        button.click();
    }
}

please review my codeand steps package for initializing the elements for locators class. I'm not follow any selenium frameworks

package steps;

import org.openqa.selenium.support.PageFactory;
import pageobject.HomePage;
import util.DriverManager;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
 * Created by naveen on 6/3/17.
 */
public class LoginSteps extends DriverManager {

    public LoginSteps() throws IOException {
    }

    //    public HomePage Login(String nam, String pas) {
    public HomePage Login() {
        String nam, pas;
        //  SamleFileInput();

        String[] namArray = prop.getProperty("nam").split(",");
        String[] pasArray = prop.getProperty("pas").split(",");

        HomePage homePageObj = PageFactory.initElements(DriverManager.driver, HomePage.class);

        String resultData;
        String status;
//        BufferedWriter writer = null;

        String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
        File logFile = new File(timeLog + ".txt");

//        writer = new BufferedWriter(new FileWriter(logFile))

//        homePageObj.userLogin(nam,pas);
        int len = namArray.length;
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(logFile))) {
            for (int i = 0; i < len; i++) {
                nam = namArray[i];
                pas = pasArray[i];

                homePageObj.userLogin(nam, pas);


                if (driver.getPageSource().contains("Hello Sony George")) {
                    status = "Success";
                } else {
                    status = "Failed";
                }

                resultData = "User: " + nam + " Pwd: " + pas + "  Status: " + status+"\n";
                System.out.println(resultData);


                writer.append(resultData);


            }
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close the writer regardless of what happens...

            } catch (Exception e) {
            }


//        homePageObj.userLogin(nam,pas);

            return homePageObj;
        }
    }
}

util package to initilize the webdriver

package util;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

/**
 * Created by naveen on 6/3/17.
 */
public class DriverManager
{
    public static WebDriver driver;
    String baseUrl;
    public Properties prop;

    public DriverManager() throws IOException {
        // Get baseUrl property
        File file = new File("config.properties");
        FileInputStream fileInput = null;
        try {
            fileInput = new FileInputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        //load properties file
        prop = new Properties();
        try {
            prop.load(fileInput);
        } catch (IOException e) {
            e.printStackTrace();
        }




        // Start driver
        System.setProperty("webdriver.chrome.driver", "/home/naveen/chromedriver");
        driver = new ChromeDriver();

        driver.manage().window().maximize();
        baseUrl = prop.getProperty("baseurl");
        driver.get(baseUrl);
    }
}

Here is the login test itself.

import org.testng.Assert;
import org.testng.annotations.Test;
import pageobject.HomePage;
import steps.LoginSteps;

import java.io.IOException;

import static util.DriverManager.driver;

/**
 * Created by naveen on 6/3/17.
 */
public class LoginTest
{
    public LoginTest() throws IOException {
    }



    @Test
    public void initDriver() throws InterruptedException, IOException {
        //Arrange
        try {
     HomePage page = new LoginSteps().Login();
            Assert.assertTrue(driver.getPageSource().contains("Hello Sony George"));


        } catch (IOException e) {
            e.printStackTrace();
        }

        //AppointmentPage page1=new Appointmentsteps().Valid(prop.getProperty("num"),prop.getProperty("usernam"),prop.getProperty("ema"),prop.getProperty("cliid"),prop.getProperty("strdate"),prop.getProperty("cat"));


    }


}

Is it a good practice to keep the looping statement for test data in loginsteps ? whether I have a user register page, so I think it will more shuffled code. so Is it possible to keep the looping statement for all common class files to put in drivermanager ? whats your opinion ?

Is it a good practice to keep the looping statement in loginsteps class?

I am working in selenium with page object design pattern. I am keeping my test data in property file. I did a sample login page. In my below code. there is pageobject package for identify the locators and steps package for initialize the elements for locators class. util package for initilize the webdriver, property file. and logintest file for testing. Here is my code.

package pageobject;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;

/**
 * Created by naveen on 6/3/17.
 */


public class HomePage {
    @FindBy(how= How.NAME, using = "username")
    WebElement username;
    @FindBy(how=How.NAME, using = "password")
    WebElement password;
    @FindBy(how=How.XPATH, using="//*[@id=\'login-container\']/form/div[3]/div/p/input[1]" )
    WebElement button;

    //enter  username
    public void  userLogin(String user, String pass)
    {
        username.sendKeys(user);
        password.sendKeys(pass);
        button.click();
    }
}

package steps;

import org.openqa.selenium.support.PageFactory;
import pageobject.HomePage;
import util.DriverManager;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
 * Created by naveen on 6/3/17.
 */
public class LoginSteps extends DriverManager {

    public LoginSteps() throws IOException {
    }

    //    public HomePage Login(String nam, String pas) {
    public HomePage Login() {
        String nam, pas;
        //  SamleFileInput();

        String[] namArray = prop.getProperty("nam").split(",");
        String[] pasArray = prop.getProperty("pas").split(",");

        HomePage homePageObj = PageFactory.initElements(DriverManager.driver, HomePage.class);

        String resultData;
        String status;
//        BufferedWriter writer = null;

        String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
        File logFile = new File(timeLog + ".txt");

//        writer = new BufferedWriter(new FileWriter(logFile))

//        homePageObj.userLogin(nam,pas);
        int len = namArray.length;
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(logFile))) {
            for (int i = 0; i < len; i++) {
                nam = namArray[i];
                pas = pasArray[i];

                homePageObj.userLogin(nam, pas);


                if (driver.getPageSource().contains("Hello Sony George")) {
                    status = "Success";
                } else {
                    status = "Failed";
                }

                resultData = "User: " + nam + " Pwd: " + pas + "  Status: " + status+"\n";
                System.out.println(resultData);


                writer.append(resultData);


            }
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close the writer regardless of what happens...

            } catch (Exception e) {
            }


//        homePageObj.userLogin(nam,pas);

            return homePageObj;
        }
    }
}

package util;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

/**
 * Created by naveen on 6/3/17.
 */
public class DriverManager
{
    public static WebDriver driver;
    String baseUrl;
    public Properties prop;

    public DriverManager() throws IOException {
        // Get baseUrl property
        File file = new File("config.properties");
        FileInputStream fileInput = null;
        try {
            fileInput = new FileInputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        //load properties file
        prop = new Properties();
        try {
            prop.load(fileInput);
        } catch (IOException e) {
            e.printStackTrace();
        }




        // Start driver
        System.setProperty("webdriver.chrome.driver", "/home/naveen/chromedriver");
        driver = new ChromeDriver();

        driver.manage().window().maximize();
        baseUrl = prop.getProperty("baseurl");
        driver.get(baseUrl);
    }
}

import org.testng.Assert;
import org.testng.annotations.Test;
import pageobject.HomePage;
import steps.LoginSteps;

import java.io.IOException;

import static util.DriverManager.driver;

/**
 * Created by naveen on 6/3/17.
 */
public class LoginTest
{
    public LoginTest() throws IOException {
    }



    @Test
    public void initDriver() throws InterruptedException, IOException {
        //Arrange
        try {
     HomePage page = new LoginSteps().Login();
            Assert.assertTrue(driver.getPageSource().contains("Hello Sony George"));


        } catch (IOException e) {
            e.printStackTrace();
        }

        //AppointmentPage page1=new Appointmentsteps().Valid(prop.getProperty("num"),prop.getProperty("usernam"),prop.getProperty("ema"),prop.getProperty("cliid"),prop.getProperty("strdate"),prop.getProperty("cat"));


    }


}
property file

baseurl=http://
nam=geo,sony,geo,geogr,ge
pas=1234,123,56,345,12

Is it a good practice to keep the looping statement for test data in loginsteps ? whether I have a user register page, so I think it will more shuffled code. so Is it possible to keep the looping statement for all common class files to put in drivermanager ? whats your opinion ?

please review my code. I'm not follow any selenium frameworks.

Testing multiple logins using Selenium listed in a property file

I am working in Selenium with page object design pattern, without any Selenium frameworks. I did a sample login page. I am keeping my test data in a property file:

baseurl=http://
nam=geo,sony,geo,geogr,ge
pas=1234,123,56,345,12

There is pageobject package to identify the locators.

package pageobject;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;

/**
 * Created by naveen on 6/3/17.
 */


public class HomePage {
    @FindBy(how= How.NAME, using = "username")
    WebElement username;
    @FindBy(how=How.NAME, using = "password")
    WebElement password;
    @FindBy(how=How.XPATH, using="//*[@id=\'login-container\']/form/div[3]/div/p/input[1]" )
    WebElement button;

    //enter  username
    public void  userLogin(String user, String pass)
    {
        username.sendKeys(user);
        password.sendKeys(pass);
        button.click();
    }
}

and steps package for initializing the elements for locators class.

package steps;

import org.openqa.selenium.support.PageFactory;
import pageobject.HomePage;
import util.DriverManager;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
 * Created by naveen on 6/3/17.
 */
public class LoginSteps extends DriverManager {

    public LoginSteps() throws IOException {
    }

    //    public HomePage Login(String nam, String pas) {
    public HomePage Login() {
        String nam, pas;
        //  SamleFileInput();

        String[] namArray = prop.getProperty("nam").split(",");
        String[] pasArray = prop.getProperty("pas").split(",");

        HomePage homePageObj = PageFactory.initElements(DriverManager.driver, HomePage.class);

        String resultData;
        String status;
//        BufferedWriter writer = null;

        String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
        File logFile = new File(timeLog + ".txt");

//        writer = new BufferedWriter(new FileWriter(logFile))

//        homePageObj.userLogin(nam,pas);
        int len = namArray.length;
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(logFile))) {
            for (int i = 0; i < len; i++) {
                nam = namArray[i];
                pas = pasArray[i];

                homePageObj.userLogin(nam, pas);


                if (driver.getPageSource().contains("Hello Sony George")) {
                    status = "Success";
                } else {
                    status = "Failed";
                }

                resultData = "User: " + nam + " Pwd: " + pas + "  Status: " + status+"\n";
                System.out.println(resultData);


                writer.append(resultData);


            }
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close the writer regardless of what happens...

            } catch (Exception e) {
            }


//        homePageObj.userLogin(nam,pas);

            return homePageObj;
        }
    }
}

util package to initilize the webdriver

package util;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

/**
 * Created by naveen on 6/3/17.
 */
public class DriverManager
{
    public static WebDriver driver;
    String baseUrl;
    public Properties prop;

    public DriverManager() throws IOException {
        // Get baseUrl property
        File file = new File("config.properties");
        FileInputStream fileInput = null;
        try {
            fileInput = new FileInputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        //load properties file
        prop = new Properties();
        try {
            prop.load(fileInput);
        } catch (IOException e) {
            e.printStackTrace();
        }




        // Start driver
        System.setProperty("webdriver.chrome.driver", "/home/naveen/chromedriver");
        driver = new ChromeDriver();

        driver.manage().window().maximize();
        baseUrl = prop.getProperty("baseurl");
        driver.get(baseUrl);
    }
}

Here is the login test itself.

import org.testng.Assert;
import org.testng.annotations.Test;
import pageobject.HomePage;
import steps.LoginSteps;

import java.io.IOException;

import static util.DriverManager.driver;

/**
 * Created by naveen on 6/3/17.
 */
public class LoginTest
{
    public LoginTest() throws IOException {
    }



    @Test
    public void initDriver() throws InterruptedException, IOException {
        //Arrange
        try {
     HomePage page = new LoginSteps().Login();
            Assert.assertTrue(driver.getPageSource().contains("Hello Sony George"));


        } catch (IOException e) {
            e.printStackTrace();
        }

        //AppointmentPage page1=new Appointmentsteps().Valid(prop.getProperty("num"),prop.getProperty("usernam"),prop.getProperty("ema"),prop.getProperty("cliid"),prop.getProperty("strdate"),prop.getProperty("cat"));


    }


}

Is it a good practice to keep the looping statement for test data in loginsteps ? whether I have a user register page, so I think it will more shuffled code. so Is it possible to keep the looping statement for all common class files to put in drivermanager ? whats your opinion ?

added 67 characters in body
Source Link
Antony
  • 121
  • 1
  • 5

please review my code. I'm not follow any selenium frameworks.

please review my code. I'm not follow any selenium frameworks.

Source Link
Antony
  • 121
  • 1
  • 5
Loading