Исключение нулевого указателя при попытке создать объект для страницы в селене с объектной моделью страницыJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Исключение нулевого указателя при попытке создать объект для страницы в селене с объектной моделью страницы

Сообщение Anonymous »

Пожалуйста, помогите мне решить NPE, где я создаю объекты для LoginPage.Java и CamapaignPage.Java в своем классе BaseTest.Java в методе @BeforeTest. Когда я попытался вызвать эти объекты в своих тестовых классах, для объекта LoginPage все работает нормально, но для объекта CampaignPage получается NPE. Добавляем фрагменты кода ниже. Любая помощь будет оценена заранее.
BaseSetup.Java

Код: Выделить всё

package com.paytm.base;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.FileInputStream;
import java.io.IOException;
import java.time.Duration;
import java.util.Properties;

public class BaseSetup {

public WebDriver driver;
public static Properties config = new Properties();
public Logger BASE_LOGGER = LoggerFactory.getLogger(BaseSetup.class);
public WebDriverWait wait;

String browser = config.getProperty("browser");

public WebDriver initDriver(){
if (browser.equals("chrome")){
driver = new ChromeDriver();
driver.get(config.getProperty("url"));
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30));
}
return driver;
}

public WebDriverWait explicitWait(WebDriver driver, int seconds){
return new WebDriverWait(driver, Duration.ofSeconds(seconds));
}

public void javaWait(int seconds){
try {
Thread.sleep(seconds*1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}

static {
String filePath = "./config.properties";
try {
final FileInputStream fin = new FileInputStream(filePath);
config.load(fin);
fin.close();
} catch (IOException ie) {
//test.log(LogStatus.WARNING, "File not found: "  + ie.getLocalizedMessage());
ie.getLocalizedMessage();
}
}

}

BaseTest.Java

Код: Выделить всё

package com.paytm;

import com.paytm.base.BaseSetup;
import com.paytm.pages.CampaignPage;
import com.paytm.pages.LoginPage;
import org.testng.annotations.*;

public class BaseTest extends BaseSetup {

LoginPage loginPage;
CampaignPage campaignPage;

@BeforeTest
public void initPageObjects(){
loginPage = new LoginPage(driver);
campaignPage = new CampaignPage(driver);
}

@BeforeSuite
public void setupBrowser(){
driver = initDriver();
}

@AfterSuite
public void tearBrowser(){
driver.quit();
}
}

LoginPage.Java

Код: Выделить всё

package com.paytm.pages;

import com.paytm.base.BaseSetup;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedConditions;

public class LoginPage extends BaseSetup{

@FindBy(xpath = "a[contains(text(),'Accept')]")
WebElement cookiesAlertAccept;

@FindBy(xpath = "//*[name()='svg' and @class='hmenu']")
WebElement hamburgerIcon;

@FindBy(xpath = "//a[contains(text(), 'Sign in with Email')]")
WebElement emailOption;

@FindBy(xpath = "//iframe[@title='Popup CTA']")
WebElement adPopUpFrame;

@FindBy(xpath = "//iframe[@id=']iframe']")
WebElement sigInIframe;

@FindBy(xpath = "//input[@]id='input_email']")
WebElement emailInput;

@FindBy(xpath = "//input[@oid='input_password']")
WebElement passwordInput;

@FindBy(xpath = "//*[name()='svg']")
WebElement closeAd;

@FindBy(xpath = "//div[@class='677656578']/button")
WebElement signInButton;

@FindBy(xpath = "//button[@alt='Verify']")
WebElement verifyOtpButton;

public LoginPage(WebDriver driver){
this.driver = driver;
PageFactory.initElements(driver, this);
}

public void acceptCookiesAlert(){
wait = explicitWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(cookiesAlertAccept));
cookiesAlertAccept.click();
}

public void closeAdPopUp(){
driver.switchTo().frame(adPopUpFrame);
closeAd.click();
driver.switchTo().defaultContent();
}

public void hamburgerClick(){
wait = explicitWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(hamburgerIcon));
hamburgerIcon.click();
}

public void clickEmailOption(){
wait = explicitWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(emailOption));
emailOption.click();
}

public void sendEmail(){
wait = explicitWait(driver, 10);
driver.switchTo().frame(sigInIframe);
wait.until(ExpectedConditions.elementToBeClickable(emailInput));
emailInput.sendKeys(config.getProperty("email"));
}

public void sendPassword(){
wait = explicitWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(passwordInput));
passwordInput.sendKeys(config.getProperty("password"));
}

public void clickSignInButton(){
wait = explicitWait(driver, 10);
if (signInButton.isEnabled()){
wait.until(ExpectedConditions.elementToBeClickable(signInButton));
signInButton.click();
}
javaWait(10);
}

public void clickVerifyOtpButton(){
wait = explicitWait(driver,  10);
if (verifyOtpButton.isEnabled()){
wait.until(ExpectedConditions.elementToBeClickable(verifyOtpButton));
verifyOtpButton.click();
}
}
}

CampaignPage.Java

Код: Выделить всё

package com.paytm.pages;

import com.paytm.base.BaseSetup;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedConditions;

public class CampaignPage extends BaseSetup {

@FindBy(xpath = "//button[text()='Create a New Campaign']")
WebElement createCampaignButton;

public CampaignPage(WebDriver driver){
this.driver = driver;
PageFactory.initElements(driver, this);
}

public String getPageTextAfterLogin(){
wait = explicitWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(createCampaignButton));
return createCampaignButton.getText();
}
}

LoginPageTest.Java

Код: Выделить всё

package com.paytm;

import org.testng.Assert;
import org.testng.annotations.Test;

public class LoginPageTest extends BaseTest {

@Test(priority = 1)
public void acceptCookieAndCloseAdPopUpCTA(){
loginPage.acceptCookiesAlert();
javaWait(5);
loginPage.closeAdPopUp();
}

@Test(priority = 2)
public void clickHamburgerIcon(){
loginPage.hamburgerClick();
}

@Test(priority = 3)
public void clickEmailOption(){
loginPage.clickEmailOption();
}

@Test(priority = 4)
public void inputEmailId(){
loginPage.sendEmail();
}

@Test(priority = 5)
public void inputPassword(){
loginPage.sendPassword();
}

@Test(priority = 6)
public void clickSignInButton(){
loginPage.clickSignInButton();
javaWait(10);
}

@Test(priority = 7)
public void clickVerifyOtpButton(){
loginPage.clickVerifyOtpButton();
}
}

CampaignPageTest.Java

Код: Выделить всё

package com.paytm;

import org.testng.Assert;
import org.testng.annotations.Test;

public class CampaignPageTest extends BaseTest{

@Test(priority = 1)
public void verifyAvailabilityOfCampaignCreateButton(){
String createCampaignButtonText = campaignPage.getPageTextAfterLogin();
Assert.assertEquals(createCampaignButtonText, "Create a New Campaign");
}
}

sanii.xml Когда я добавил в XML-файл только класс CampaignPageTest, код будет работать, но когда я попробую и с LoginPageTest, и с CampaignPageTest получить NPE для класса CampaignPage.java.
Журналы консоли
java.lang.NullPointerException
на com.paytm.CampaignPageTest.verifyAvailabilityOfCampaignCreateButton(CampaignPageTest.java:10)
в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(собственный метод)
в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
в java. base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
в java.base/java.lang.reflect.Method.invoke(Method.java:566)
в org. testng.internal.invokers.MethodInvocateHelper.invokeMethod(MethodInvoker.java:141)
в org.testng.internal.invokers.TestInvoker.invokeMethod(TestInvoker.java:686)
в org.testng.internal. Invokers.TestInvoker.invokeTestMethod(TestInvoker.java:230)
в org.testng.internal.invokers.MethodRunner.runInSequence(MethodRunner.java:63)
в org.testng.internal.invokers.TestInvoker$ MethodInvokeAgent.invoke(TestInvoker.java:992)
в org.testng.internal.invokers.TestInvoker.invokeTestMethods(TestInvoker.java:203)
в org.testng.internal.invokers.TestMethodWorker.invokeTestMethods( TestMethodWorker.java:154)
на org.testng.internal.invokers.TestMethodWorker.run(TestMethodWorker.java:134)
на java.base/java.util.ArrayList.forEach(ArrayList.java: 1541)
в org.testng.TestRunner.privateRun(TestRunner.java:739)
в org.testng.TestRunner.run(TestRunner.java:614)
в org.testng.SuiteRunner .runTest(SuiteRunner.java:421)
на org.testng.SuiteRunner.runSequentially(SuiteRunner.java:413)
на org.testng.SuiteRunner.privateRun(SuiteRunner.java:373)
в org.testng.SuiteRunner.run(SuiteRunner.java:312)
в org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
в org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker. java:95)
на org.testng.TestNG.runSuitesSequentially(TestNG.java:1274)
на org.testng.TestNG.runSuitesLocally(TestNG.java:1208)
на org.testng .TestNG.runSuites(TestNG.java:1112)
на org.testng.TestNG.run(TestNG.java:1079)
на com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java :65)
на com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:105)

Подробнее здесь: https://stackoverflow.com/questions/790 ... um-with-pa
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»