2016-08-08 7 views
0

Ich habe den Code, wie WebDriverEventListener in normaler Weise in Selen zu verwenden. Aber ich weiß nicht, wie man das gleiche für PageFactory Muster verwendet.Wie benutze WebDriverEvent Listener in Page Factory Muster

Der Kodex ist wie folgt, müssen zunächst WebDriverEventListner Schnittstelle

public class EventHandler implements WebDriverEventListener{ 

    private Log log = LogFactory.getLog(this.getClass()); 

    public void afterChangeValueOf(WebElement arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 
     log.info("inside method afterChangeValueOf on " + arg0.toString()); 
     log.info("inside method afterChangeValueOf on " + arg0.toString()); 
    } 

    public void afterClickOn(WebElement arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 
     log.info("inside method afterClickOn on " + arg0.toString()); 
    } 

    public void afterFindBy(By arg0, WebElement arg1, WebDriver arg2) { 
     // TODO Auto-generated method stub 
     log.info("Find happened on " + arg1.toString() 
       + " Using method " + arg0.toString()); 
    } 

    public void afterNavigateBack(WebDriver arg0) { 
     // TODO Auto-generated method stub 

     log.info("Inside the after navigateback to " + arg0.getCurrentUrl()); 
    } 

    public void afterNavigateForward(WebDriver arg0) { 
     // TODO Auto-generated method stub 
     log.info("Inside the afterNavigateForward to " + arg0.getCurrentUrl()); 
    } 

    public void afterNavigateTo(String arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 
     log.info("Inside the afterNavigateTo to " + arg0); 
    } 

    public void afterScript(String arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 
     log.info("Inside the afterScript to, Script is " + arg0); 
    } 

    public void beforeChangeValueOf(WebElement arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 

     log.info("Inside the beforeChangeValueOf method"); 
    } 

    public void beforeClickOn(WebElement arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 
     log.info("About to click on the " + arg0.toString()); 

    } 

    public void beforeFindBy(By arg0, WebElement arg1, WebDriver arg2) { 
     // TODO Auto-generated method stub 
     log.info("Just before finding element " + arg1.toString()); 

    } 

    public void beforeNavigateBack(WebDriver arg0) { 
     // TODO Auto-generated method stub 
     log.info("Just before beforeNavigateBack " + arg0.getCurrentUrl()); 

    } 

    public void beforeNavigateForward(WebDriver arg0) { 
     // TODO Auto-generated method stub 
     log.info("Just before beforeNavigateForward " + arg0.getCurrentUrl()); 

    } 

    public void beforeNavigateTo(String arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 
     log.info("Just before beforeNavigateTo " + arg0); 
    } 

    public void beforeScript(String arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 
     log.info("Just before beforeScript " + arg0); 
    } 

    public void onException(Throwable arg0, WebDriver arg1) { 
     log.info("Exception occured at " + arg0.getMessage()); 

    } 

    public void afterNavigateRefresh(WebDriver arg0) { 
     // TODO Auto-generated method stub 

    } 

    public void beforeNavigateRefresh(WebDriver arg0) { 
     // TODO Auto-generated method stub 

    } 

} 

Als nächstes müssen wir verwenden, um dies in Skript, wie unten implementieren:

@BeforeClass() 
    public void signIn() throws Exception 
     { 

     BasicConfigurator.configure(); 
     PropertyConfigurator.configure(PROPERTIES_FILEPATH); 

     log = Logger.getLogger("SuperTest"); 

     //Delete the test-output directory 
     try 
     { 
     FileUtils.deleteDirectory(new File("./test-output")); 
     } 
     catch(Exception e) 
     { 

     } 

     //Get the Browser Type and initiate the Driver 
     driver = GenericUtilLibrary.initializeBrowser(driver, BROWSER_TYPE); 
     driver.manage().deleteAllCookies(); 
     driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS); 
     driver.manage().window().maximize(); 

     //create a object for EventFiringWebDriver Class 
     eventDriver = new EventFiringWebDriver(driver); 

     //create object of the class (EventHandler) which implemented WebDriverEventListener Interface. 
     handler = new EventHandler(); 

     //register handler object with EventFiringWebDriver 
     eventDriver.register(handler); 


     eventDriver.get(URL); 


     //CLICK ON SIGNIN BUTTON IN LOGIN PAGE. 
     LoginPage lpage = new LoginPage(driver); 
     lpage.clickSignInButton(); 


     //ENTER USER CREDENTIALS AND CLICK ON SIGNON BUTTON IN SIGNIN PAGE. 
     SignInPage spage = new SignInPage(driver); 
     spage.clickSignInButton(USERNAME, PASSWORD); 
    } 

Einmal registriert, wird Eventdriver behandeln die Protokollierung der Aktionen von WebDriver, wenn wir eventDriver für alle WebElements verwenden.

Till eventDriver.get (URL); Ich habe kein Problem, aber wenn es zum nächsten Schritt kommt, rufe ich Object Page Classes auf und rufe ihre Methoden auf. Um eventDriver anstelle des Treiberobjekts zu senden, erhalte ich NULLPOINTEREXCEPTION, wenn es die erste Methode selbst aufruft.

Ich habe keine Ahnung, wie Sie WebDriverEventListener verwenden.

Bitte helfen Sie mir dabei.

Antwort

1

In Ihrem Code haben Sie einen einfachen Fehler.

Statt:

//CLICK ON SIGNIN BUTTON IN LOGIN PAGE. 
     LoginPage lpage = new LoginPage(driver); 
     lpage.clickSignInButton(); 

sollten Sie verwenden:

//CLICK ON SIGNIN BUTTON IN LOGIN PAGE. 
     LoginPage lpage = new LoginPage(handler); 
     lpage.clickSignInButton(); 
+0

Dank Denis für Ihre Antwort sein sollte. Wenn ich es wie oben beschrieben ausprobiere, bekomme ich 'java.lang.NullPointerException;' es kommt unter 'com.tecnotree.CLM.Commons.EventHandler.beforeFindBy (EventHandler.java:67)' weil der LoginPage Constructor wie folgt ist: 'public LoginPage (WebDriver-Treiber) { this.driver = Treiber; PageFactory.initElements (driver, this); } ' –

+0

Versuchen Sie," Handler "anstelle von" EventDriver " –

+0

@SaradaAkurathi zu verwenden, versuchen Sie, dieses Beispiel zu überprüfen, es kann Ihnen helfen, https://www.seleniumeasy.com/selenium-tutorials/webdriver-event-listener-example –

0

Das Problem ist in WebDriverEventListener Klasse, nicht in den Konstruktor für jede Klasse zu initialisieren. Mit @Denis Vorschlag wird es funktionieren. In WebDriverEventListener Klasse ist falsch mit beforeFindBy

public void beforeFindBy(By arg0, WebElement arg1, WebDriver arg2) { 
    // TODO Auto-generated method stub 
    log.info("Just before finding element " + arg1.toString()); 

} 

als

public void beforeFindBy(By arg0, WebElement arg1, WebDriver arg2) { 
    // TODO Auto-generated method stub 
    log.info("Just before finding element " + arg0); 

}