Selenium TestNg中的静态和非静态

Selenium TestNg中的静态和非静态,selenium,selenium-webdriver,testng,Selenium,Selenium Webdriver,Testng,我有senario,我想了解在TestNG中使用访问修饰符静态和非静态。这是实际代码` public class BaseClass { public WebDriver driver =null; public File f = null; public FileInputStream fs = null; public static Properties config = null; private final String configPath=

我有senario,我想了解在TestNG中使用访问修饰符静态和非静态。这是实际代码`

public class BaseClass {

    public  WebDriver driver =null;
    public File f = null;
    public FileInputStream fs = null;
    public static Properties config = null;
    private final String configPath="C:\\Users\\prakumak\\eclipse-workspace\\WebDriverTestNGDDFramwork\\src\\MangoHCM\\Config.properties";

    @BeforeClass
    public  void setup() throws Exception {

        f = new File(configPath);
        try {
        fs = new FileInputStream(f);
        config = new Properties();
        config.load(fs);
        }catch(FileNotFoundException e) {
            System.out.println(" File is not present");
        }catch(IOException e) {
            System.out.println("File not loaded");
        }

        if(config.getProperty("BrowserName").equalsIgnoreCase("Firefox")) {
            driver = new FirefoxDriver();
        }else if(config.getProperty("BrowserName").equalsIgnoreCase("Chrome")) {
            driver = new ChromeDriver();
        }else {
            throw new Exception("BrowserName is either not mentione OR not correct");
        }

    }
场景1:当我将Properties变量STATIC和setup()方法设置为非静态时,我仍然能够直接在非静态setup()方法中调用Properties变量。如何在非静态方法中使用静态变量

场景2:当我将Setup()方法设置为静态,将Properties变量设置为非静态时,我得到一个错误,即“不能对非静态字段进行静态引用”。这对我来说没问题。
请帮助我了解静态和非静态如何在TestNG中工作?它和Java的一般概念是一样的还是有些不同?在testNG的任何方法中添加注释是否会使其成为静态的?

在Java和testNG中,静态和非静态的概念是相同的

非静态始终需要一个上下文,由该上下文引用。静态不需要上下文,但可以使用类名。如果您的代码在该类中(即BaseClass.config),则不需要使用类名。同样的规则也适用于方法(即代码中的BaseClass.setup(),除非将安装程序声明为静态)

如果添加一个用@Before注释的非静态setup()方法,您将有两个方法,一个需要上下文,另一个不需要上下文。为了使代码更具可读性,我建议将静态setup()方法重命名为setupClass()

因为您的方法是用@BeforeClass注释的,所以它必须是静态的。它绑定到类而不是上下文。这是@BeforeClass隐式要求的

  • @BeforeClass需要一个静态方法
  • @Before需要一个非静态方法
您始终可以从确实需要上下文的方法访问不需要上下文的字段和方法。请记住,没有上下文的字段由静态和非静态方法共享,甚至在具有不同上下文的不同非静态方法之间共享


基本规则是对字段和方法使用相同的修饰符(非静态或静态)。

静态和非静态的概念在Java和TestNG中是相同的

非静态始终需要一个上下文,由该上下文引用。静态不需要上下文,但可以使用类名。如果您的代码在该类中(即BaseClass.config),则不需要使用类名。同样的规则也适用于方法(即代码中的BaseClass.setup(),除非将安装程序声明为静态)

如果添加一个用@Before注释的非静态setup()方法,您将有两个方法,一个需要上下文,另一个不需要上下文。为了使代码更具可读性,我建议将静态setup()方法重命名为setupClass()

因为您的方法是用@BeforeClass注释的,所以它必须是静态的。它绑定到类而不是上下文。这是@BeforeClass隐式要求的

  • @BeforeClass需要一个静态方法
  • @Before需要一个非静态方法
您始终可以从确实需要上下文的方法访问不需要上下文的字段和方法。请记住,没有上下文的字段由静态和非静态方法共享,甚至在具有不同上下文的不同非静态方法之间共享


基本规则是对字段和方法使用相同的修饰符,无论是非静态修饰符还是静态修饰符。

这与java概念相同。要在静态方法中使用非静态变量,请为类创建对象并使用它访问其变量。这与java概念相同。要在静态方法中使用非静态变量,请为类创建对象并使用它访问其变量。