当前位置: 首页 > 知识库问答 >
问题:

@BeforeClass和@AfterClass方法未执行

松鸣
2023-03-14
package baseClasses;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;

public final class InitSetUp {


    private WebDriver driver;
    private static String baseDriverPath="D:\\driver\\";
    
    public WebDriver getDriver() {
        return driver;
    }

    private void setDriver(String browserName, String url) {
        switch(browserName) {
        case "Chrome" : {
            System.out.println("Setting chorme driver please wait");
            driver = initChromeDriver(url);
        }

        case "Firefox" :{
            System.out.println("Setting firefox driver please wait");
            driver = initFirfoxDriver(url);
        }
        case "IE" : {
            
        }

        }
    }
    
    private WebDriver initChromeDriver(String url) {
        System.out.println("initializing chorme driver please wait");
        System.setProperty("webdriver.chrome.driver", baseDriverPath + "chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        System.out.println("Navigating to given url please wait");
        driver.navigate().to(url);
        return driver;
    }
    private WebDriver initFirfoxDriver(String url) {
        System.out.println("initializing Firefox driver please wait");
        System.setProperty("webdriver.firefox.driver", baseDriverPath + "geckodriver.exe");
        WebDriver driver = new ChromeDriver();
        System.out.println("Navigating to given url please wait");
        driver.navigate().to(url);
        return driver;
    }
    
    @Parameters({"browserName","openURL"})
    @BeforeClass
    public void initBorwser(String browserName,String openURL) {
        System.out.println("Initializing Class..");
        try {
            setDriver(browserName, openURL);
        } catch (Exception e) {
            System.out.println("Error....." + e.getStackTrace());
        }
    }
    
    @AfterClass
    public void tearDown() {
        System.out.println("Quiting please wait");
        driver.quit();
    }

}

这是另一堂课

package testClasses;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;

import baseClasses.InitSetUp;

public class OpenTest {

    private WebDriver driver;
    
    public OpenTest() {
        System.out.println("In Open Test");
        InitSetUp baseclass= new InitSetUp();
        driver = baseclass.getDriver();
    }
    
    @Test
    public void openBroser() {
        System.out.println("TEST ONE");
    }
    
}

和TESTNG XML--------

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >

<suite name="TESTX" verbose="1" >
 <parameter name="browserName" value="Firefox" />
    <parameter name="openURL" value="google.com" />
  <test name="TestOpen" >
    <classes>
       <class name="testClasses.OpenTest" />
        <class name="baseClasses.InitSetUp" />
    </classes>
  </test>
 

</suite>

当我在testNG中运行上述XML时,它没有执行@BeforeCLass和@AfterClass方法。它将输出显示为-

[RemoteTestNG]在Open Test Test ONE中检测到TestNG版本7.2.0

共有1个答案

仇建茗
2023-03-14

您的代码有错误。。。要回答您的问题,为什么不调用@beforeclast@afterclass,是因为您没有将InitSetUp类扩展到OpenTest

因此,不要将其更改为公共类初始化设置,而改为公共类初始化设置

并在此处应用继承

将其更改为public class OpenTest Extendes InitSetUp,而不是public class OpenTest

 类似资料:
  • 问题内容: 在下面使用这种方法时,通过设置带有套件的jUnit。当每个Testclass中的所有@BeforeClass将在开始执行任何测试之前执行时,我们遇到了问题。(对于每个n个TestClass文件,@BeforeClass运行,然后在它们执行之后,它开始执行第一个MyTest.class文件@Test) 这将导致我们分配大量的资源和内存。我的想法是一定是错误的,每个@BeforeClass

  • 在我的测试中,自动化在两个移动设备上运行测试,并与testNG feamework并行。@BeforeClass和@AfterClass方法位于所有其他测试类继承的基类(超级)中。BeforeClass方法初始化驱动程序会话,AfterClass终止会话。 问题是@AfterClass没有执行。因此,驱动程序会话没有终止,随后对BeforeClass的调用也因此失败。这导致每个类中只执行第一个测试

  • 假设我有testng.xml, 这可能包含更多接近10-15的类,这是我的通用testng.xml,来自不同的testdata,我想要的是跳过com.testclass1类(对于特定情况),其余的test应该执行。 我尝试使用TestNG的IAnnotationTransformer监听器来实现我的类。 代码段是, 并在测试类级别调用此侦听器,如 @Listeners(com.skiptestcl

  • 问题内容: 我有一个抽象基类,用作我的单元测试(TestNG 5.10)的基础。在该类中,我将初始化测试的整个环境,设置数据库映射等。此抽象类具有一个带有注释的方法,该方法可以进行初始化。 接下来,我用具有方法和方法的特定类扩展该类。这些方法对环境进行类特定的初始化(例如,将一些记录放入数据库中)。 如何执行带注释的方法的特定顺序?我需要先执行抽象基类中的那些,然后再执行扩展类中的那些。 例: 预

  • 我对在TestNG中使用注释@beforeClass、afterClass、beforeSuite、afterSuite感到困惑。 接下来,afterSuite、beforeSuite和@test: 我的问题是关于语义,意思,而不是实际的代码。我读了testNG文档--没有帮助。

  • 我试图用硒和cucumber做并行测试。因此,我们有大约130个测试场景,运行时间约为1.5小时。现在通过并行运行所有这些测试,我可以减少时间。 我正在使用以下两个插件: 因此,假设我给出线程计数或分叉计数3,它将调用3个浏览器,并运行测试。使用CUcumber JVM并行插件,我为所有场景创建了131个runner。使用Cucumber的@Before注释,我可以调用浏览器一次,接下来的所有实例