如何将黄瓜钩子集成到TestNG框架中?

时间:2018-12-31 11:34:27

标签: maven selenium cucumber testng

在现有框架中,我可以借助以下步骤正常启动单个浏览器:

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");
    }
}

**`

  

那么,如何为URL和driversetup重构Hooks类?

`**

0 个答案:

没有答案
相关问题