Selenium POM和TestNG NullPointer异常

时间:2018-04-19 09:29:28

标签: java selenium-webdriver nullpointerexception testng pageobjects

我正在尝试使用网络驱动程序,testng和页面工厂自动化。但我面临空指针异常。 以下是相同的代码。

主页页面对象类

这是页面工厂类

package POM;

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

public class HomePage 
{       
    WebDriver driver;
    private static WebElement element = null;

    public HomePage(WebDriver driver)
    {
        this.driver = driver;
    }

    public static WebElement signin(WebDriver driver)
    {
        element=driver.findElement(By.xpath("/html/body/div/div[1]/header/div[2]/div/div/nav/div[1]/a"));
        return element;
    }

    public static WebElement emailCreate(WebDriver driver)
    {
        element=driver.findElement(By.id("email_create"));
        return element;
    }

    public static WebElement submitCreate(WebDriver driver)
    {
        driver.findElement(By.id("SubmitCreate"));
        return element;
    }

}

这是在实际测试中执行的测试类。 测试用例类

package POM;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;

import POM.HomePage;

public class MyTest {


    private static WebDriver driver = null;

  @BeforeMethod
  public void beforeMethod() 
  {

        System.setProperty("webdriver.chrome.driver", "C:/chromedriver_win32/chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        driver.get("http://www.automationpractice.com");
        System.out.println("Hi");
        driver.manage().window().maximize();  
  }

  @Test
  public void login() throws InterruptedException 
  {
      System.out.println("login");
      HomePage.signin(driver).click();
      String title = driver.getTitle();
      System.out.println(title);
      HomePage.emailCreate(driver).sendKeys("ulkah@xpanxion.co.in");
      Thread.sleep(2000);
      HomePage.submitCreate(driver).click();

  }

  @AfterMethod
  public void afterMethod() 
  {
      driver.close();
  }

}

异常 我正在低于例外。

[RemoteTestNG] detected TestNG version 6.14.2
Starting ChromeDriver 2.36.540470 (e522d04694c7ebea4ba8821272dbef4f9b818c91) on port 42928
Only local connections are allowed.
Apr 19, 2018 2:48:27 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
Hi
login
FAILED CONFIGURATION: @AfterMethod afterMethod
java.lang.NullPointerException
    at POM.MyTest.afterMethod(MyTest.java:41)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
    at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:59)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:455)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:222)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:716)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:988)
    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:114)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

FAILED: login
java.lang.NullPointerException
    at POM.HomePage.signin(HomePage.java:16)
    at POM.MyTest.login(MyTest.java:30)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:580)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:716)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:988)
    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:114)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)


===============================================
    Default test
    Tests run: 1, Failures: 1, Skips: 0
    Configuration Failures: 1, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 1, Failures: 1, Skips: 0
Configuration Failures: 1, Skips: 0
===============================================

有人可以帮我解决这个错误吗?

2 个答案:

答案 0 :(得分:2)

看起来驱动程序== null,这就是你得到这些例外的原因。

尝试替换

private static WebDriver driver = null;

通过

private static WebDriver driver = new ChromeDriver();

或者在您的beforeMethod替换

WebDriver driver=new ChromeDriver();

通过

driver=new ChromeDriver();

因为您实际上正在创建第二个驱动变量。

答案 1 :(得分:0)

最简单的解决方案是您不应两次声明/创建“ driver”对象。

在测试用例中,您两次创建了驱动程序对象

1st-类变量: 私有静态WebDriver驱动程序= null;

2nd-在@Before方法中: WebDriver driver =新的ChromeDriver();

从第二个实例中删除“ WebDriver”,并使其成为 “ 驱动程序=新的C​​hromeDriver();

仅此而已,您的空指针异常将消失并且代码将执行。