Search This Blog

Tuesday, November 18, 2014

Logging using AbstractWebDriverEventListener/WebDriverEventListener

WebDriverEventListener is an Interface and AbstractWebDriverEventListener is an abstract class. These are used for logging before an event occurs.They behave similar to the listeners(iTestListener) in TestNG.

It has few custom abstract methods defined under the class/interface.In order to use these listener one has to extend AbstractWebDriverEventListener  or implement WebDriverEventListener and the custom class has to override the below methods.







Sample Implementation

I have created an custom webdriver logger class ("WebdriverLogger") which implements the webdriver event listener interface and overrides all methods under it.Find the Sample Page below:

WebdriverLogger.class

 public class WebdriverLogger implements WebDriverEventListener{  
      @Override  
      public void beforeNavigateBack(WebDriver arg1){  
           System.out.println("beforeNavigateBack");  
      }  
      @Override  
      public void afterNavigateBack(WebDriver arg1){  
           System.out.println("afterNavigateBack");  
      }  
      @Override  
      public void afterScript(String arg0, WebDriver arg1){  
           //-Add Code  
      }  
      @Override  
      public void beforeScript(String arg0, WebDriver arg1){  
      }  
      @Override  
      public void beforeFindBy(By arg0, WebElement arg1 , WebDriver arg2){  
      }  
      @Override  
      public void afterFindBy(By arg0, WebElement arg1 , WebDriver arg2){  
      }  
      @Override  
      public void beforeClickOn(WebElement arg1 , WebDriver arg2){  
           System.out.println("beforeClickOn");  
      }  
      @Override  
      public void afterClickOn(WebElement arg1 , WebDriver arg2){  
           System.out.println("afterClickOn");  
      }  
      @Override  
      public void beforeNavigateForward(WebDriver arg2){  
      }  
      @Override  
      public void afterNavigateForward(WebDriver arg2){  
      }  
      @Override  
      public void beforeNavigateTo(String url, WebDriver arg2){  
           System.out.println("beforeNavigateTo");  
      }  
      @Override  
      public void afterNavigateTo(String url, WebDriver arg2){  
           System.out.println("afterNavigateTo");  
      }  
      @Override  
      public void afterChangeValueOf(WebElement arg0, WebDriver arg1){  
      }  
      @Override  
      public void beforeChangeValueOf(WebElement arg0, WebDriver arg1){  
      }  
      @Override  
      public void onException(Throwable t, WebDriver arg1){  
           System.out.println("Exception Caught"+t.getMessage());  
      }  
 }  

Tests have been defined in a separate class 'TestWebdriverListener' which adds the event and triggers the logging process.

TestWebdriverListener.java

public class TestWebdriverListener {  
      private static WebDriver driver;  
      private static EventFiringWebDriver edriver;  
      @BeforeMethod  
      public static void setUp(){  
           driver=new ChromeDriver();  
           edriver=new EventFiringWebDriver(driver);  
           edriver.register(new WebdriverLogger());  
           edriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);  
      }  
      @Test  
      public static void testMobikwik(){  
           edriver.navigate().to("https://www.mobikwik.com/");  
           //edriver.findElement(By.xpath("//*[@id='gs_htif0']")).sendKeys("George Bernard Shaw");  
           edriver.findElement(By.xpath("//ul[@class='user-auth-nav nav-secondary sub-block quarter flushright hud-light']//li[@class='sub-block one-w glued tiny']/a")).click();  
      }  
      @AfterMethod  
      public static void tearDown(){  
           edriver.quit();  
      }  
 }  

Sample Output

 Starting ChromeDriver (v2.9.248315) on port 45663  
 beforeNavigateTo  
 afterNavigateTo  
 beforeClickOn  
 afterClickOn  
 PASSED: testGoogle  
 ===============================================  
   Default test  
   Tests run: 1, Failures: 0, Skips: 0  
 ===============================================