2016-08-03 2 views
1

Буду признателен за любые советы здесь. Я пытаюсь использовать объект драйвера из инфраструктуры POM с помощью TestNG и реализации интерфейса ITestListerner.Как сфокусироваться на драйвере firefox в сочетании с TestNG, реализующим ITestListener

Это класс TestNG реализации ItestListener

public class TestNGListener implements ITestListener { 

@Override 
public void onFinish(ITestContext result) { 


    WebDriver driver = BrowserFactory.LanuchBrowser("firefox", "http://10.207.182.108:81/opencart/"); 
    Util.takescreenshot(driver, result.getName()); 


} 

Этот класс используется для возврата WebDriver объекта после запуска одного браузера от коммутатора случае. Я использую тот же драйвер, как обособленно TestNG путем внедрения Itestlistener & перекрывая отказа общественного недействительным onFinish (ITestContext результат) в вышеприведенном классе &, к сожалению, он не возвращает объект WebDriver & сделать снимок экрана, но запускает новый браузер вместо ,

public class BrowserFactory { 

static WebDriver driver; 

    public static WebDriver LanuchBrowser(String Brwsr, String URL){ 

     System.out.println(Brwsr.toLowerCase()); 
     switch (Brwsr.toLowerCase()){ 

      case "firefox": 
         driver=new FirefoxDriver(); 
         break; 
      case "chrome": 
         driver= new ChromeDriver(); 
         System.setProperty("WebDriver.chrome.driver", "chromedriver.exe"); 
         break; 

      case "internet explorer": 
         System.out.println("IE"); 
         driver= new InternetExplorerDriver(); 
         System.setProperty("WebDriver.IE.driver","IEDriverServer.exe"); 
         break; 
      default: 
         System.out.println("Please select one of the Browsers listed : Chrome,Firefox or InternetExplorer"); 
         break; 
     } 


      driver.manage().window().maximize(); 
      driver.get(URL);      


     return driver; 

    } 
} 

Вот мой метод для захвата экрана

public class Util { 

final static Logger logger = Logger.getLogger(Util.class);  

public static void validatePgeNavgtn(WebDriver driver, String PgeTitle){ 
    PropertyConfigurator.configure("log4j.properties"); 


    String pgtitle=driver.getTitle(); 

    if (pgtitle.equalsIgnoreCase(PgeTitle)){ 
    logger.info("title matched");  
    } 
} 

public static void takescreenshot(WebDriver driver, String screen){ 
    TakesScreenshot ts = (TakesScreenshot)driver; 
    File src= ts.getScreenshotAs(OutputType.FILE); 
    try { 
     FileUtils.copyFile(src, new File("./Screenshot/"+screen+".png")); 
    } catch (IOException e) { 
     logger.warn(e.getMessage()); 
    } 
} 

Не могли бы вы предложить подход, который ниже метод не должен запустить новый сеанс браузера, но основное внимание следует сохранить в первую очередь браузера & также Захватите снимок экрана

ответ

1

Вам необходимо создать класс BrowserFactory как singleton, который создаст всегда, указывая один экземпляр BrowserFactory, как показано ниже: -

public class BrowserFactory { 

    private WebDriver driver; 
    private static BrowserFactory browserFactoryInstance = null; 

    private BrowserFactory(String Brwsr, String URL) { 

     System.out.println(Brwsr.toLowerCase()); 
     switch (Brwsr.toLowerCase()) { 

     case "firefox": 
      this.driver = new FirefoxDriver(); 
      break; 
     case "chrome": 
      System.setProperty("WebDriver.chrome.driver", "chromedriver.exe"); 
      this.driver = new ChromeDriver(); 
      break; 

     case "internet explorer": 
      System.out.println("IE"); 
      System.setProperty("WebDriver.IE.driver", "IEDriverServer.exe"); 
      this.driver = new InternetExplorerDriver(); 
      break; 
     default: 
      System.out 
        .println("Please select one of the Browsers listed : Chrome,Firefox or InternetExplorer"); 
      break; 
     } 

     this.driver.manage().window().maximize(); 
     this.driver.get(URL); 

    } 

    public static BrowserFactory getInstance(String Brwsr, String URL) { 
     if(browserFactoryInstance == null) { 
      browserFactoryInstance = new BrowserFactory(Brwsr, URL); 
     } 
     return browserFactoryInstance; 
    } 

    public WebDriver getDriver() { 
     return this.driver; 
    } 
} 

Теперь вы можете получить WebDriver экземпляр, как показано ниже: -

//It will return always single instance per test run 
WebDriver driver = BrowserFactory.getInstance("firefox", "http://10.207.182.108:81/opencart/").getDriver(); 
Util.takescreenshot(driver, result.getName()); 
+0

Большое спасибо за предложение. Мне нужно включить конструктор с аргументом, как показано ниже, чтобы иметь возможность использовать 'browserFactoryInstance = new BrowserFactory (Brwsr, URL);' или мне нужно сделать вызов 'BrowserFactory (String Brwsr, String URL)' из 'getInstance () '. –

+0

@nandeshkalyankar вы не можете вызвать конструктор напрямую, потому что он является частным .. вам нужно вызвать getInstance() вместо этого. –

Смежные вопросы