Я создал объектную модель страницы для тест-кейсов с селием.Я определил метод входа в класс «LoginPage» и некоторые методы в классе «CommonMethods».Теперь, когда я запускаю тест, он показывает ошибку NullPointerException.Я сделал то же самое с JUnit, и он отлично работал с этой установкой, но не работал с TestNG.
Это мой объектный файл страницы:
package pages;
import org.openqa.selenium.WebDriver;
public class PageObject {
public WebDriver driver;
public PageObject(WebDriver driver) {
this.driver=driver;
}
}
Файл CommonMethods
package pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class CommonMethods extends PageObject {
public CommonMethods(WebDriver driver) {
super(driver);
}
public By ByLocator(String locator) {
By result=null;
if(locator.startsWith("/")||locator.startsWith("//"))
result=By.xpath(locator);
else if(locator.startsWith(".")||locator.startsWith("#"))
result=By.cssSelector(locator);
return result;
}
public void waitForElementPresent(By locator, int time) {
WebDriverWait wait = new WebDriverWait(driver, time);
wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
}
}
Файл LoginPage
package pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class LoginPage extends PageObject {
public LoginPage(WebDriver driver) {
super(driver);
}
CommonMethods cm = new CommonMethods(driver);
By usernameField = cm.ByLocator("#login");
By passwordField = cm.ByLocator("#password");
By submitButton = cm.ByLocator("#signin_submit");
public void loginWithCustomer() {
driver.get("https://www.stg.keepcollective.com/signin");
//cm.waitForElementPresent(usernameField, 3000);
driver.findElement(usernameField).sendKeys("joshimeghakeep@yopmail.com");
driver.findElement(passwordField).sendKeys("111111");
}
}
Тестовый файл
package tests;
import org.testng.annotations.Test;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import java.io.*;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.ITestResult;
import org.testng.annotations.AfterClass;
import pages.*;
public class LoginCheck {
public WebDriver driver;
CommonMethods cm=new CommonMethods(driver);
LoginPage lp=new LoginPage(driver);
@BeforeClass
public void beforeClass() throws Exception {
System.setProperty("webdriver.chrome.driver", "/home/himanshu/Downloads/chromedriver_linux64/chromedriver");
driver= new ChromeDriver();
}
@Test
public void checkLoginFunctionality() {
lp.loginWithCustomer();
}
@AfterMethod
public void Screenshot(ITestResult result) throws IOException {
if(result.getStatus()==ITestResult.FAILURE) {
TakesScreenshot ss= (TakesScreenshot)driver;
File screenshotfile = ss.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(screenshotfile, new File("./Screenshots/"+result.getName()+".png"));
}
}
@AfterClass
public void afterClass() {
driver.close();
}
}
Я получаю эту ошибку:
FAILED: checkLoginFunctionality
java.lang.NullPointerException
at pages.LoginPage.loginWithCustomer(LoginPage.java:19)
at tests.LoginCheck.checkLoginFunctionality(LoginCheck.java:35)
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:124)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:648)
at org.testng.TestRunner.run(TestRunner.java:505)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
at org.testng.SuiteRunner.run(SuiteRunner.java:364)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
at org.testng.TestNG.runSuites(TestNG.java:1049)
at org.testng.TestNG.run(TestNG.java:1017)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)