我看到了很多示例,但在每个示例中,我都没有提到在testNG中的beforeSuite和afterSuite中需要静态的内容
我的情况是我拥有MainRunner和BaseTest来扩展MainRunner
MainRunner:
public static void main(String[] args) {
TestListenerAdapter tla = new TestListenerAdapter();
TestNG testng = new TestNG();
testng.setTestClasses(new Class[] { testRunner.class });
testng.addListener(tla);
testng.run();
}
public class baseTest {
static WebDriver driver;
public static mainPage main;
public static culturePage mainCulturePage;
public static mainArticle mainArticle;
BaseTest:
@BeforeSuite
public static void setup() {
//locating the driver and maximize the browser window
System.setProperty("webdriver.chrome.driver" , "F:\\java-projects\\.AB-Settings Folder\\chromedriver.exe");
driver= new ChromeDriver();
driver.manage().window().maximize();
//create reporting folder and report
//init();
main = new mainPage(driver);
mainCulturePage = new culturePage(driver);
mainArticle = new mainArticle(driver);
}
@AfterSuite
public static void close() {
//extent.flush();
driver.quit();
}
}
所以问题是为什么我需要使其静态化? (这些类和注释)才能运行?除了这些实例之外,它们还可以在实例外部工作而无需实例化的静态方法的解释是什么?
还建议更改不推荐使用的选项:
testng.addListener(tla);
答案 0 :(得分:1)
您可以使用多级继承来使您的代码更加结构化和易于维护,并且无需使用任何静态方法就可以做到。
例如:
public class ClassA {
public void setUp() {
// Perform the setup operation of the driver here
}
public void closeDriver() {
// Close the driver here
}
}
public class ClassB extends ClassA{
@BeforeSuite
public void initializeDriver(){
//Call the setUp method from ClassA here
setUp();
}
@AfterSuite
public void closeDriver(){
//Call the closeDriver method from ClassA here
closeDriver();
}
//Add all the other BeforeClass and AfterClass also in this class .
}
public class ClassC extends ClassB{
@Test
public void testMethod(){
// Write your test method here
}
}
因此,通过使用上述多级继承,您无需将任何方法设为静态,并且@Test启动时,它将自动运行ClassB方法,该方法将完成脚本的初始化和关闭驱动程序部分。
要回答您已弃用的问题,可以在知道方法已弃用的情况下在方法前使用@Deprecated注释,以免将来不再使用该方法。
请告诉我它是否有帮助!