java - 我正在 selenium 自动化中创建页面对象模型框架,并且面临 java 空指针异常

标签 java selenium nullpointerexception frameworks

一共有三个类(class)。一个用于浏览器初始化的类(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)

最佳答案

BrowserConfig.startApplication在方法范围内初始化新的WebDriver,需要使用返回值

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

关于java - 我正在 selenium 自动化中创建页面对象模型框架,并且面临 java 空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60051163/

相关文章:

java - TestNG 中的优先事项

python - 从网页上的 anchor 标记访问详细信息

java - 文本在网页中出现多少次 - Selenium Webdriver

出现 java.lang.NullPointerException

android - 用于同步的空引用(监视器输入)

java - Spring Security SAML 扩展,具有跨多个 tomcat web 应用程序的“记住我”功能

java - 为什么 Collections.sort() 比 Arrays.sort() 慢得多?

java - @Value使用Spring注入(inject) map 的 map ?

java - 执行显示控制台窗口的命令并获取进程的句柄

java - 当需要返回单个值时避免空指针