Я создаю инфраструктуру объектной модели страницы в автоматизации селена, и я сталкиваюсь с исключением java нулевого указателя - PullRequest
0 голосов
/ 04 февраля 2020

Всего три класса. Один класс для инициализации браузера (BrowserConfig. java), один для хранения элементов страницы (LoginPageElements. java) и один класс для выполнения тестового примера (Login_positive_case. java).

BrowserConfig. java

package com.midcities.utility;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

import com.paulhammant.ngwebdriver.NgWebDriver;

public class BrowserConfig {

    public static WebDriver startApplication(WebDriver driver, String browsername, String AppUrl) {

        if(browsername.equalsIgnoreCase("chrome")) {

            System.setProperty("webdriver.chrome.driver", "./Drivers/chromedriver.exe");

            driver = new ChromeDriver();

        } else if(browsername.equalsIgnoreCase("firefox")){

            System.setProperty("webdriver.gecko.driver", "./Drivers/geckodriver.exe");

            driver = new FirefoxDriver();

        } else {

            System.out.println("Browser not supported");
        }

        NgWebDriver ngWebDriver = new NgWebDriver((JavascriptExecutor) driver);

        ngWebDriver.waitForAngularRequestsToFinish();

        driver.manage().window().maximize();

        driver.get(AppUrl);

        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

        return driver;
    }



    public static void quitBrowser(WebDriver driver) {

        driver.quit();

    }

}

LoginPageElements. java

package com.midcities.pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

import com.paulhammant.ngwebdriver.ByAngular;

public class LoginPageElements {

    WebDriver driver;

    public LoginPageElements(WebDriver driver){

        this.driver = driver;

    }

    public void Login(String uname, String pass) {

        driver.findElement(By.id("mat-input-0")).sendKeys(uname);

        driver.findElement(By.id("mat-input-1")).sendKeys(pass);

        driver.findElement(ByAngular.buttonText("SIGN IN")).click();

    }


}

Login_positive_case. java

package com.midcities.testcases;

import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;

import com.midcities.pages.LoginPageElements;
import com.midcities.utility.BrowserConfig;

public class Login_Positive_Case {

    WebDriver driver;

    @Test
    public void loginIntoTheApplication() {

        BrowserConfig.startApplication(driver, "chrome", "http://test.com/");

        LoginPageElements loginFunc = new LoginPageElements(driver);

        loginFunc.Login("test@gmail.com", "test");

    }

}

Журнал консоли

FAILED: loginIntoTheApplication
java.lang.NullPointerException
    at com.midcities.pages.LoginPageElements.Login(LoginPageElements.java:20)
    at com.midcities.testcases.Login_Positive_Case.loginIntoTheApplication(Login_Positive_Case.java:20)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)

1 Ответ

1 голос
/ 04 февраля 2020

BrowserConfig.startApplication инициализация нового WebDriver в области действия метода, необходимо использовать возвращаемое значение

driver = BrowserConfig.startApplication(driver, "chrome", "http://test.com/"); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...