Как интегрировать Cucumber Hooks в среду TestNG? - PullRequest
0 голосов
/ 31 декабря 2018

В моем существующем фреймворке я обычно могу запустить один браузер с помощью следующих шагов:

1.Файл configuration.properties: указаны пути к исполняемому драйверу и URL-адресу

  • chromedriverpath = src \ test \ resources \ drivers \ chromedriver.exe

  • url = someTestingURL

2.Класс ConfigFileReader: для чтения файла конфигурации

public static Properties properties;    
private final String 
propertyFilePath="src/test/resources/configurations/configuration.properties"       

        public ConfigFileReader(){          
             BufferedReader reader;
               try {
                reader = new BufferedReader(new FileReader(propertyFilePath));
                properties = new Properties();
                try {
                    properties.load(reader);
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }           } 
              catch (FileNotFoundException e) 
                {
                e.printStackTrace();
                throw new RuntimeException("Config.properties not found at " + propertyFilePath); 

       public String getApplicationUrl() {
            String url = properties.getProperty("url");             
            if(url != null) return url;             
            else throw new RuntimeException("url not specified in the Config.properties file."); 
              }                   

      public String getDriverPath(){
              String driverPath =properties.getProperty("chromedriverpath");
              if(driverPath!= null) return driverPath;
              else throw new RuntimeException("Chrome driverPath not 
              specified in the Config.properties file.");
             }
             } 

3.Класс DriverType: определены различные драйверы

 public enum DriverType {   
                      FIREFOX,  
                      CHROME,   
                      INTERNETEXPLORER }

4.Класс EnvironmentType: для выбора среды

 public enum EnvironmentType {  
                     LOCAL,//own system
                     REMOTE,//docker some other software }

4.Класс WebDriverManager: код для выбора драйвера

package managers;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import enums.DriverType;
import enums.EnvironmentType;

public class WebDriverManager {
  private WebDriver driver;
  private static DriverType driverType;
  private static EnvironmentType environmentType;
  private static final String CHROME_DRIVER_PROPERTY = 
 "webdriver.chrome.driver";
 private static final String FIREFOX_DRIVER_PROPERTY = "webdriver.gecko.driver"; 

 public static Properties reportportal = null;

 public WebDriverManager() {
 driverType = FileReaderManager.getInstance().getConfigReader().getBrowser();
 environmentType = FileReaderManager.getInstance().getConfigReader().getEnvironment();
 }

 public WebDriver getDriver() {
 if(driver == null) driver = createDriver();
 return driver;
 }

 private WebDriver createDriver() {
    switch (environmentType) {     
         case LOCAL : driver = createLocalDriver();
          break;
         case REMOTE : driver = createRemoteDriver();
          break;
    }
    return driver;
 }

 private WebDriver createRemoteDriver() {
 throw new RuntimeException("RemoteWebDriver is not yet implemented");
 }

 private WebDriver createLocalDriver() {
        switch (driverType) {     
        /*case FIREFOX : driver = new FirefoxDriver();
      break;*/
        case CHROME : 
         System.setProperty(CHROME_DRIVER_PROPERTY, FileReaderManager.getInstance().getConfigReader().getDriverPath());
         driver = new ChromeDriver();
     break;
        }
          if(FileReaderManager.getInstance().getConfigReader().getBrowserWindowSize()) driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(FileReaderManager.getInstance().getConfigReader().getImplicitlyWait(), TimeUnit.SECONDS);
 return driver;
 } 

 public static void loadReportPoratlProperty() throws IOException {
        reportportal = new Properties();
        FileInputStream ip = new FileInputStream(
                System.getProperty("user.dir") + "\\src\\test\\resources\\config\\reportportal.properties");
        reportportal.load(ip);
    }
 public void closeDriver() {
 driver.close();
 driver.quit();
 }

}

Это фактический набор, который я сделал для выбора драйвера, и я могу выполнить с файлом ниже testng.xml

   <?xml version="1.0" encoding="UTF-8"?> 
   <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
   <suite name="First Suite" > 
     <test name="Chrome Test" >
       <classes> 
         <classname ="tests.report.runners.ReportRunner"></class> 
       </classes> 
    </test> 
  </suite>

Что я хочу сделать сейчас:

  1. С помощью крючков для огурцов я могу разместить все эти предпосылки и параметры публикации централизованно

Пример:

public class Hooks {
    @Before
    public void beforeScenario(){
         //Launch browser
         //send url
        System.out.println("This will run before the Scenario");
    } 

   @After
    public void afterScenario(){
   //quit browser
        System.out.println("This will run after the Scenario");
    }
}

** `

Итак, как реструктурировать класс Hooks для URL и настройки драйвера?

`**

...