2016-08-03 17 views
1

einführt Ich würde schätzen und für jeden möglichen Rat hier danken. Ich versuche, das Treiberobjekt von POM-Framework mithilfe von TestNG zu verwenden und ITestListernner Schnittstelle zu implementieren.Wie man Fokus auf firefox Treiber in Verbindung mit TestNG erhält, das ITestListener

Dies ist eine TestNG Klasse 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()); 


} 

Diese Klasse ein WebDriver Objekt nach dem Start zurückkehren wird verwendet, die Umsetzung eines des Browser von Schaltergehäusen. Ich benutze den gleichen Treiber als TestNG durch die Implementierung von Itestlistener & überschreiben Fehler öffentliche void onFinish (ITestContext Ergebnis) in der obigen Klasse & leider gibt es kein Webdriver-Objekt & nehmen Sie einen Screenshot, sondern startet stattdessen einen neuen Browser .

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; 

    } 
} 

Hier ist meine Methode Screenshot zu erfassen

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

Könnten Sie bitte einen Ansatz vorschlagen, dass unter Methode eine neue Browser-Sitzung nicht starten sollte, aber der Schwerpunkt sollte & auch auf den ersten Browser-Instanz beibehalten werden Capture a screenshot

Antwort

1

Sie müssen BrowserFactory Klasse als Singleton erstellen, die immer eine einzelne Instanz von BrowserFactory wie folgt erstellen: -

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

Jetzt können Sie wie unten WebDriver Instanz erhalten: -

//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

Vielen Dank für die Anregung. Muss ich einen Konstruktor mit einem Argument wie folgt einfügen, um 'browserFactoryInstance = new BrowserFactory (Brwsr, URL);' oder sollte ich einen Aufruf von 'BrowserFactory (String Brwsr, String URL)' von 'getInstance () 'Methode. –

+0

@nandeshkalyankar Sie können Konstruktor nicht direkt aufrufen, weil es privat ist. Sie müssen stattdessen getInstance() aufrufen .. –