@BeforeSuite и @AfterSuite должны быть статическими? - PullRequest
0 голосов
/ 28 января 2019

Я видел много примеров, и в каждом из них я не видел упоминаний о статических параметрах, необходимых в beforeSuite и afterSuite в testNG

Мой сценарий состоит в том, что у меня есть 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);

1 Ответ

0 голосов
/ 30 января 2019

Вы можете использовать многоуровневое наследование, чтобы сделать ваш код более структурированным и простым в обслуживании, и вы можете сделать это без использования статического метода.
Например:

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 перед методом, когда вы знаете, что метод теперь устарел, чтобы не использовать метод в будущем.

Пожалуйста, дайте мне знать, если это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...