Selenium TestNg中的静态和非静态
我有senario,我想了解在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=
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概念相同。要在静态方法中使用非静态变量,请为类创建对象并使用它访问其变量。