0

我使用 testNG 注释编写了以下测试:

public class Create {
    
    WebDriver driver;
    
    @BeforeClass
    
    public void testsetup() {
        
        WebDriverManager.chromedriver().setup();
        driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.manage().window().maximize();
    }
        
        @BeforeMethod
        public void Login() {
        driver.get("www.xyz.com");//just an example
    }
    
    @Test(priority=3)
    
    public void AccountCreate() {
        System.out.println("Test3");
    }

        }
    
    @Test(priority=1)
    public void CompanyCreate() {
        System.out.println("Test1");
    }

    @Test(priority=2)
    public void VerifyResult() {
        System.out.println("Test2");
            }
    }
    
    @AfterMethod
    public void Logout() {
        
        System.out.println("print after method");
    }
    
    @AfterClass
    public void CloseBrowser() {
        driver.close();
        
    }
}

o/p 是这样的:

print after method
test1
print after method
test2
print after method
test3

观察;@BeforeClass先执行,再@Beforemethod执行,然后@Aftermethod 再执行@Test(priority=1)@Aftermethod然后@Beforemethod再执行,@Test(priority=2)以此类推。

但在所有@Test运行之后,只有@Aftermethod执行。任何人,请帮助我。我真的找不到到底是什么问题。

4

1 回答 1

0

您的代码块中没有问题。我拿了你的代码,简化了一点,用语句替换了Browsing Context行,Sysout()这是执行结果:

  • 代码块:

    public class Aftermethod_Test {
    
        WebDriver driver;
    
        @BeforeClass
        public void testsetup() {
    
            System.out.println("print before class");
        }
    
        @BeforeMethod
        public void Login() {
            System.out.println("print before method");
        }
    
        @Test(priority=3)
    
        public void AccountCreate() {
            System.out.println("Test3");
        }
    
        @Test(priority=1)
        public void CompanyCreate() {
            System.out.println("Test1");
        }
    
        @Test(priority=2)
        public void VerifyResult() {
            System.out.println("Test2");
        }
    
        @AfterMethod
        public void Logout() {
            System.out.println("print after method");
        }
    
        @AfterClass
        public void CloseBrowser() {
            System.out.println("print after class");
        }
    }
    
  • 控制台输出:

    print before class
    print before method
    Test1
    print after method
    print before method
    Test2
    print after method
    print before method
    Test3
    print after method
    print after class
    PASSED: CompanyCreate
    PASSED: VerifyResult
    PASSED: AccountCreate
    
    ===============================================
        Default test
        Tests run: 3, Failures: 0, Skips: 0
    ===============================================
    
    
    ===============================================
    Default suite
    Total tests run: 3, Failures: 0, Skips: 0
    ===============================================
    

分析

这个观察看起来很完美,并且符合您的期望。

您的用例

Sysout()早些时候,后来有时从@Test到达控制台观察到它@Aftermethod。一个简单的解决方案是使用所有最新的二进制文件更新您的测试环境:

  • 测试NG<version>6.10</version>
  • JDK升级到当前级别JDK 8u251
  • Selenium升级到当前级别版本 3.141.59

参考

您可以在以下位置找到详细的相关讨论:

于 2020-07-30T10:46:03.037 回答