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)
loginVerification
inloginText=loginVerification.getText();
has not been initialized. – c0der