【问题标题】:I am trying to create a framework and I am getting this error java.lang.NullPointerException [duplicate]我正在尝试创建一个框架,但出现此错误 java.lang.NullPointerException [重复]
【发布时间】:2018-07-01 15:23:45
【问题描述】:

下面是我收到java.lang.NullPointerException 错误的代码

错误:[RemoteTestNG] 检测到 TestNG 版本 6.14.2 在端口 29667 上启动 ChromeDriver 2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb) 只允许本地连接。 2018 年 7 月 1 日晚上 8:21:49 org.openqa.selenium.remote.ProtocolHandshake createSession 信息:检测到的方言:OSS 失败:登录 java.lang.NullPointerException 在 org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69) 在 org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38) 在 com.sun.proxy.$Proxy9.sendKeys(未知来源) 在 com.Agec.Actions.LoginPageActions.getLogin(LoginPageActions.java:20) 在 com.Agec.Tests.Bat_Suite.Login(Bat_Suite.java:22) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124) 在 org.testng.internal.Invoker.invokeMethod(Invoker.java:580) 在 org.testng.internal.Invoker.invokeTestMethod(Invoker.java:716) 在 org.testng.internal.Invoker.invokeTestMethods(Invoker.java:988) 在 org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) 在 org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109) 在 org.testng.TestRunner.privateRun(TestRunner.java:648) 在 org.testng.TestRunner.run(TestRunner.java:505) 在 org.testng.SuiteRunner.runTest(SuiteRunner.java:455) 在 org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450) 在 org.testng.SuiteRunner.privateRun(SuiteRunner.java:415) 在 org.testng.SuiteRunner.run(SuiteRunner.java:364) 在 org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 在 org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84) 在 org.testng.TestNG.runSuitesSequentially(TestNG.java:1208) 在 org.testng.TestNG.runSuitesLocally(TestNG.java:1137) 在 org.testng.TestNG.runSuites(TestNG.java:1049) 在 org.testng.TestNG.run(TestNG.java:1017) 在 org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114) 在 org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251) 在 org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

================================================ 默认测试

测试运行:1,失败:1,跳过:0

================================================ 默认套件

运行的总测试次数:1,失败次数:1,跳过次数:0

package com.Mil.Pages;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

public class LoginPage 
  {   
@FindBy(xpath="//input[@type='text']")
public WebElement CellNo;

@FindBy(xpath="//input[@type='password']")
public WebElement Password;

@FindBy(xpath="//span[text()=Sign in")
public WebElement SignInBtn;

}


package com.Mil.Actions;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
import com.Mil.Pages.LoginPage;
import com.Mil.Tests.TestCaseBase;
public class LoginPageActions
  {
WebDriver driver;

LoginPage lp=PageFactory.initElements(TestCaseBase.driver, LoginPage.class);
public LoginPageActions(WebDriver driver)
{
    this.driver=driver;
}
 public void getLogin()
      {
 lp.CellNo.sendKeys("123");
 lp.Password.sendKeys("569");
 lp.SignInBtn.click();
     }
       }    


package com.Mil.Tests;
import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
public class TestCaseBase 
 {
    public  static WebDriver driver=null;
    @BeforeTest
    public void LaunchBrowser() throws Exception
     {
    Properties Prop=new Properties();
    File Fil=new File("C:\\Users\\eclipse- 
     workspace\\Mil\\TestConfig\\config.properties");
   FileInputStream fileInput=new FileInputStream(Fil);
   Prop.load(fileInput);
System.setProperty("webdriver.chrome.driver",Prop.getProperty("Chrome_Path"));
   driver=new ChromeDriver();
   driver.get(Prop.getProperty("Url"));
    }

  @AfterTest()
  public void CloseBrowser()
  {
      driver.quit();
      }
          }



package com.Mil.Tests;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.Test;
import com.Mil.Actions.LoginPageActions;
public class Bat_Suite extends TestCaseBase
 {
  LoginPageActions lpa=PageFactory.initElements(TestCaseBase.driver, 
 LoginPageActions.class);
  @Test(priority=1)
   public void Login ()
     {
    lpa.getLogin();
       }
   }

【问题讨论】:

标签: java pointers exception nullpointerexception null


【解决方案1】:

您的驱动程序为空,您正在尝试调用它,但初始化元​​素时为空。 要解决您的问题,您需要将 @BeforeTest 更改为 @BeforeClass,即使在这种情况下您不需要任何 TestNG 注释。

public class TestCaseBase { 
public static WebDriver driver=null; 

@BeforeClass
public void LaunchBrowser() throws Exception { 
Properties Prop=new Properties(); 
File Fil=new File("C:\\Users\\eclipse- workspace\\Mil\\TestConfig\\config.properties"); 
FileInputStream fileInput=new FileInputStream(Fil); 
Prop.load(fileInput); 
System.setProperty("webdriver.chrome.driver",Prop.getProperty("Chrome_Path"));      
driver=new ChromeDriver(); 
driver.get(Prop.getProperty("Url")); 
}

@AfterClass() 
public void CloseBrowser() { 
driver.quit(); 
} 
} 

推荐的解决方案是使用单例创建获取驱动程序函数,检查驱动程序是否为空,如果是,则创建新驱动程序并返回。

而且你必须弄清楚注解的类型:

@BeforeSuite:注解的方法将在该套件中的所有测试之前运行 跑了。
@AfterSuite:带注释的方法将在此套件中的所有测试之后运行 已经跑了。

@BeforeTest:被注释的方法将在任何属于的测试方法之前运行 到标签内的类运行。 @AfterTest:注解的方法将在所有测试方法之后运行 属于标签内的类已经运行。

@BeforeGroups:此配置方法将运行的组列表 前。此方法保证在第一次测试前不久运行 调用属于任何这些组的方法。
@AfterGroups:此配置方法将要使用的组列表 追赶。此方法保证在最后一次运行后不久运行 调用属于任何这些组的测试方法。

@BeforeClass:注解的方法会在第一次测试之前运行 调用当前类中的方法。 @AfterClass:注解的方法将在所有测试之后运行 当前类中的方法已运行。

@BeforeMethod:注解的方法会在每次测试之前运行 方法。
@AfterMethod:注解的方法将在每个测试方法之后运行。来自 TestNG 文档。

@BeforeTest 在您的 xml 运行器中的标记之前工作。

【讨论】:

  • 好的,非常感谢,我将 BeforeTest 更改为 BeforeClass 还将 pageFactory 和类 Object 移到方法中并且工作正常。非常感谢..
  • 享受您的测试。请接受我的回答
猜你喜欢
  • 2021-04-30
  • 2019-10-30
  • 2023-02-14
  • 1970-01-01
  • 2014-07-26
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多