2016-08-08 28 views
0

我得到了代碼如何在硒中以正常方式使用WebDriverEventListener。 但不知道如何使用PageFactory模式相同。如何在頁面工廠模式中使用WebDriverEvent監聽器

的代碼如下,實現WebDriverEventListner接口

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 

    } 

} 

接下來,我們需要在腳本如下使用此首先需要:

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

一旦註冊成功,事件驅動將處理記錄的當我們對所有WebElements使用eventDriver時,WebDriver的行爲。

直到eventDriver.get(URL);我沒有問題,但是當涉及到下一步時,我正在調用對象頁面類並調用它們的方法。發送eventDriver而不是驅動程序對象,當它調用第一個方法本身時,我得到NULLPOINTEREXCEPTION。

我不知道如何使用WebDriverEventListener。

請任何人幫助我。

回答

1

在你的代碼中你有一個簡單的錯誤。

相反的:

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

你應該使用:

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

感謝丹尼斯您的回覆。當按照上面的方法嘗試時,我得到'java.lang.NullPointerException;'它來自'com.tecnotree.CLM.Commons.EventHandler.beforeFindBy(EventHandler.java:67)',因爲LoginPage constrcutor如下所示:'public LoginPage (WebDriver驅動程序){this.driver = driver; PageFactory.initElements(driver,this); }' –

+0

嘗試使用「處理程序」而不是「eventDriver」 –

+0

@SaradaAkurathi,試着檢查這個例子,它可能會幫助你https://www.seleniumeasy.com/selenium-tutorials/webdriver-event-listener-example –

0

的問題是在WebDriverEventListener類,而不是在初始化每個類的構造函數。有了@Denis的建議,它會起作用。在WebDriverEventListener級,錯的是用beforeFindBy

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

} 

應該爲

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

}