2

I am new to Selenium and I'm trying to create a small framework in which I login an application and then trying to verify some text inside the account.

But as soon as my script logged into account, the browser gets closed and I am unable to verify text string.

Some people are saying it is because driver is being null and that I need to import base class in LoginPage.
I tried this as well and got the same issue.

BASE CLASS

package testcases;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;


import factory.BrowserFactory;
import factory.DataproviderFactory;
import pages.LoginPage;

public class baseClass {

 WebDriver driver;


    public void setUP()
    {
        driver=BrowserFactory.getBrowser("chrome");
        driver.get(DataproviderFactory.getConfig().getApplicationurl());
    }

    public void loginIntoApplication()
    {

        LoginPage login=PageFactory.initElements(driver, LoginPage.class);
        login.Login(DataproviderFactory.getExcel().getData(0, 0, 0), DataproviderFactory.getExcel().getData(0, 0, 1));

    }


    public void TearDown()
    {
        driver.quit();
    }


}

LOGIN PAGE

package pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import testcases.baseClass;


public class LoginPage extends baseClass {

    WebDriver driver;

    public LoginPage(WebDriver ldriver) 
    {
        this.driver=ldriver;
    }


    @FindBy(xpath="//input[@id='log']") WebElement username;
    @FindBy(xpath="//input[@id='pwd']") WebElement password;
    @FindBy(xpath="//input[@id='login']") WebElement LoginButton;

    @FindBy(xpath="//li[@id='wp-admin-bar-my-account']/a") WebElement loginVerification;
    public  String loginText;
    public  String Exp="Howdy, AISHWARY";



    public void Login(String uname,String pwd)
    {
        username.sendKeys(uname);
        password.sendKeys(pwd);
        LoginButton.click();
    }

    public String LoginVerification()
    {
        WebDriverWait wait=new WebDriverWait(driver, 20);
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//li[@id='wp-admin-bar-my-account']/a")));
        loginText=loginVerification.getText();
        return loginText;
    }
}

testCaseLoginPage

package testcases;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import pages.LoginPage;


public class testCaseLoginPage extends baseClass{

    WebDriver driver;

    baseClass base=new baseClass();

    @BeforeTest
    public void initial()
    {
        base.setUP();
    }

    @Test(priority=1)
    public void login()
    {

        base.loginIntoApplication();
        LoginPage login=PageFactory.initElements(driver, LoginPage.class);

        login.LoginVerification();
        System.out.println(login.loginText);
        Assert.assertEquals(login.loginText, login.Exp,"Unable to verify login verification");

    }

    @AfterTest
    public void close()
    {
        base.TearDown();
    }
}

Error Log

[TestNG] Running:
  C:\Users\Freak\AppData\Local\Temp\testng-eclipse--1783674419\testng-customsuite.xml

Starting ChromeDriver 2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9) on port 10357
Only local connections are allowed.
May 28, 2017 7:08:42 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
FAILED: login
java.lang.NullPointerException
    at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:770)
    at org.openqa.selenium.support.ui.FluentWait.<init>(FluentWait.java:96)
    at org.openqa.selenium.support.ui.WebDriverWait.<init>(WebDriverWait.java:71)
    at org.openqa.selenium.support.ui.WebDriverWait.<init>(WebDriverWait.java:45)
    at pages.LoginPage.LoginVerification(LoginPage.java:42)
    at testcases.testCaseLoginPage.login(testCaseLoginPage.java:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
    at org.testng.TestNG.run(TestNG.java:1031)
Louys Patrice Bessette
  • 27,837
  • 5
  • 32
  • 57
Ashu
  • 27
  • 1
  • 3
  • Can you share what dependencies you are using/ – Akshay May 28 '17 at 02:10
  • Possible duplicate of [What is a NullPointerException, and how do I fix it?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – Tom May 28 '17 at 02:27
  • @akshay-1-Maven java dependency 2-TestNG maven dependency 3-Extent Report dependency 4-Apache POI dependency 5-Apache POI dependency-OOXML – Ashu May 28 '17 at 02:43
  • Welcome to SO. The stack trace points to an error in 'loginText=loginVerification.getText();` . It would be helpful to mark this line in the code. I suspect that `loginVerification` in `loginText=loginVerification.getText();` has not been initialized. – c0der May 28 '17 at 03:22
  • WebDriverWait wait=new WebDriverWait(driver, 20); is causing you error – Kushal May 28 '17 at 06:44
  • @Kushal-- How to resolve it...i mean what to use.....even before putting wait i was facing same issue – Ashu May 28 '17 at 07:50
  • Can you consider updating what you are exactly doing in `LoginVerification()`? Thanks – DebanjanB May 28 '17 at 09:26

1 Answers1

0

I found the same error in appium as below

java.lang.NullPointerException
    at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:882)
    at io.appium.java_client.TouchAction.<init>(TouchAction.java:52)

Cause-: Because I have initialised driver in child and parent class both as below.

Child class

public class AirAsia extends Base {
@SuppressWarnings("rawtypes")
  private AndroidDriver driver;

/*
 * Sign up Page Elements
 */

@AndroidFindBy(xpath = "//*[@text='Flights']")
private MobileElement flights;}

Base Class

    public class Base {

@SuppressWarnings("rawtypes")
public AppiumDriver driver;

/*
 * General App Elements
 */

@AndroidFindBy(xpath = "//androidx.appcompat.app.ActionBar.Tab[@content-desc=\"Home\"]/android.widget.TextView")
public MobileElement home;}

Solution-:

So now you remove the driver initialisation from child class as below Child class

    public class AirAsia extends Base {
@SuppressWarnings("rawtypes")
  private AndroidDriver driver;

/*
 * Sign up Page Elements
 */

@AndroidFindBy(xpath = "//*[@text='Flights']")
private MobileElement flights;}

Hope it will help all to solve such type of errors in both Selenium and Appium using Java or any language. Just don't have to initialise driver if you are extending parent class and if yo have initialise driver in base or parent class.

NITIN SURANGE
  • 346
  • 3
  • 7