繁体   English   中英

TestNG @BeforeClass初始化代码未在Test之前运行

[英]TestNG @BeforeClass initialization code not running before Test

我正在用Selenium,TestNG编写测试代码。 我试图在@BeforeClass部分设置一些元素,因为我在同一页面上重复了这些操作。 但是我得到了空指针异常。 有没有解决此问题的方法?

public class RunTest {
private static WebElement user;
private static WebElement pass;
private static WebElement login;

@BeforeClass
public static void driveraBaglan() {
    //Driver is declared here. I removed it to give the simple code. 
    user = driver.findElement(By.id("user"));
    pass = driver.findElement(By.id("pass"));
    login = driver.findElement(By.xpath("//button[contains(.,'Log In')]"));
    statusMessage = driver.findElement(By.id("login-status-message")).getText();

}
@Test(priority=1)
public void loginNoInfo() {
        user.clear();
        pass.clear();
}

我在user.clear()pass.clear()login.click()函数上收到空指针错误。 该页面上的所有测试都在同一页面上运行。 我不想在页面上的每个测试中使用重复的“按ID查找元素”标签。

 @BeforeTest: The annotated method will be run before any test method belonging to the classes inside the <test> tag is run. @BeforeClass: The annotated method will be run before the first test method in the current class is invoked 

尝试更改注释

@BeforeTest
public static void driveraBaglan() {
    //Driver is declared here. I removed it to give the simple code. 
    user = driver.findElement(By.id("user"));
    pass = driver.findElement(By.id("pass"));
    login = driver.findElement(By.xpath("//button[contains(.,'Log In')]"));
    statusMessage = driver.findElement(By.id("login-status-message")).getText();

}

我从未使用过TestNG,但确实使用过Junit 尝试复制您的示例,我获得了以下异常:

[TestNG] Running:
  /Users/davide.patti/Library/Caches/IntelliJIdea2017.3/temp-testng-customsuite.xml

java.lang.NullPointerException
    at TestSO.loginNoInfo(TestSO.java:27)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
    at org.testng.TestNG.run(TestNG.java:1031)
    at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
    at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)

原因是因为在导入的类中,我使用的是Junit的BeforeClass:

import org.junit.BeforeClass;
import org.testng.annotations.Test;

而不是TestNG。

如果空指针异常相同,请确保导入的类是正确的类:

import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; 

我因意外更改而遇到了同样的问题。

当您遇到以下困境时(在启用测试方法的情况下将该类设置为禁用的测试类),您可能还会在@BeforeClass或@BeforeTest中初始化的对象上获得空指针异常。

@Test(enabled=false)
public class TestClass{
    A a;    

    @BeforeClass
    public void doBeforeClass(){
      a=new A();
      //
    }

    @Test
    public void test1(){
       a.callMethod1();
    }

    @Test
    public void test2(){
       a.callMethod2();
    }

}

在这里,当通过仅对类放置@Test(enabled=false)来运行全套件时,由于那里存在@Test批注,因此套件仍将在类中运行单个测试。 但是,由于@BeforeClass并未针对整个类运行,因此对象'a'未初始化,并且将导致空指针异常。

在这种情况下,也需要将各个@Test批注更改为@Test(enabled=false)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM