首页 文章

使用除@BeforeClass之外的任何注释时,获取空指针

提问于
浏览
1

Base Class Code :

protected WebDriver driver;
protected String URL = "https://www.example.com/";
public Signup signuppage;   

@BeforeGroups
 public void setup()
    {    
        System.setProperty("webdriver.chrome.driver","E:\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.navigate().to(URL);
        signuppage = PageFactory.initElements(driver, Signup.class);

    }

Signup Page Code :

protected WebDriver driver;

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

Testcase Code :

@Test(groups="SignupButton")
public void Signup_Disabled_Check() {

    signuppage.signupbtn();

}

堆栈跟踪 :

Testcases.SignUpTest.Signup_Disabled_Check(SignUpTest.java:27)中的java.lang.NullPointerException请参考C:\ Users \ mike \ IdeaProjects \ web \ target \ surefire-reports获取各个测试结果 . org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)位于org.apache.maven.life循环的org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) .internal.MojoExecutor.execute(MojoExecutor.java:145)org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder) .java:80)org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) )org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)atg.apache.maven.DefaultMaven.execute(DefaultMaven.java: 106)org.apache.maven.cli.MavenCli.execute(MavenCli.java:862)org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286)atg.ap ache.maven.cli.MavenCli.main(MavenCli.java:197)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl . 在org.codehaus的org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)的java.lang.reflect.Method.invoke(Method.java:497)中调用(DelegatingMethodAccessorImpl.java:43) .plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)at org.codehaus.plexus.classworlds.launcher.Launcher .main(Launcher.java:356)引起:org.apache.maven.plugin.MojoFailureException:有测试失败 .

当我使用 @BeforeClasssetup() 时,它工作正常 . 但是如果尝试使用 @BeforeSuite@BeforeGroups ,我会得到空指针异常 .

我使用这个命令运行它:

mvn test -Dgroups=SignupButton

2 回答

  • 0

    对于@BeforeGroups,您应首先定义一个组,然后为该注释指定名称 . 这就是你使用这个注释获得异常的原因 .

    @BeforeGroup(groups={"SignupButton"})
    
  • 0

    问题出在您的SignupPage类上 . 它应该有一个no-args或默认构造函数 . 或者更好的实施方式如下:

    signuppage = new Signup(driver);
    

    然后在Signup类中创建一个构造函数,如下所示:

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

    编辑:在调试模式下运行您的代码 . 在该类的第27行添加调试点,看看它是否为null . 如果是这样..然后在初始化程序块中添加调试点,看看控制何时进入那里,那应该告诉你流程 .

相关问题