Skip to content

Instantly share code, notes, and snippets.

@krmahadevan
Created February 3, 2012 07:08
Show Gist options
  • Star 10 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save krmahadevan/1728633 to your computer and use it in GitHub Desktop.
Save krmahadevan/1728633 to your computer and use it in GitHub Desktop.
Demo that shows how to make use of Event Firing Web Driver.
package com.test;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.events.EventFiringWebDriver;
import org.testng.annotations.Test;
import com.test.listeners.WebDriverListener;
import com.test.webdriver.MyRemoteWebDriver;
import com.test.webdriver.MyWebElement;
public class ClassWithListener {
@Test
public void testMethod() throws MalformedURLException {
DesiredCapabilities dc = new DesiredCapabilities();
dc.setBrowserName(DesiredCapabilities.firefox().getBrowserName());
MyRemoteWebDriver rwd = new MyRemoteWebDriver(new URL(MyConstants.URL.toString()), dc);
EventFiringWebDriver efwd = new EventFiringWebDriver(rwd);
WebDriverListener eventListener = new WebDriverListener(rwd);
efwd.register(eventListener);
efwd.get("http://www.linkedin.com/");
MyWebElement element = new MyWebElement(rwd.findElement(By.name("search")));
element.click();
efwd.quit();
}
}
enum MyConstants {
URL("http://localhost:4444/wd/hub");
private String value;
private MyConstants(String value) {
this.value = value;
}
public String toString() {
return this.value;
}
}
package com.test.webdriver;
import java.net.URL;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
public class MyRemoteWebDriver extends RemoteWebDriver {
public MyRemoteWebDriver(URL remoteAddress, Capabilities desiredCapabilities) {
super(remoteAddress, desiredCapabilities);
}
}
package com.test.webdriver;
import org.openqa.selenium.WebElement;
public class MyWebElement {
private WebElement element;
public MyWebElement(WebElement element) {
this.element = element;
}
public void click() {
System.out.println("About to perform clicking on a web element");
validateWebElement();
element.click();
}
public void setElement(WebElement element) {
this.element = element;
}
private void validateWebElement() {
if (this.element == null)
throw new IllegalStateException("WebElement cannot be null");
}
}
package com.test.listeners;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.events.WebDriverEventListener;
public class WebDriverListener implements WebDriverEventListener {
private RemoteWebDriver webDriver;
public WebDriverListener(RemoteWebDriver webDriver){
this.webDriver = webDriver;
}
public void beforeNavigateTo(String url, WebDriver driver) {
System.out.println("Before navigating to url printing the browser associated capabilities");
System.out.println(this.webDriver.getCapabilities());
}
public void afterNavigateTo(String url, WebDriver driver) {
// TODO Auto-generated method stub
}
public void beforeNavigateBack(WebDriver driver) {
// TODO Auto-generated method stub
}
public void afterNavigateBack(WebDriver driver) {
// TODO Auto-generated method stub
}
public void beforeNavigateForward(WebDriver driver) {
// TODO Auto-generated method stub
}
public void afterNavigateForward(WebDriver driver) {
// TODO Auto-generated method stub
}
public void beforeFindBy(By by, WebElement element, WebDriver driver) {
// TODO Auto-generated method stub
}
public void afterFindBy(By by, WebElement element, WebDriver driver) {
// TODO Auto-generated method stub
}
public void beforeClickOn(WebElement element, WebDriver driver) {
// TODO Auto-generated method stub
}
public void afterClickOn(WebElement element, WebDriver driver) {
// TODO Auto-generated method stub
}
public void beforeChangeValueOf(WebElement element, WebDriver driver) {
// TODO Auto-generated method stub
}
public void afterChangeValueOf(WebElement element, WebDriver driver) {
// TODO Auto-generated method stub
}
public void beforeScript(String script, WebDriver driver) {
// TODO Auto-generated method stub
}
public void afterScript(String script, WebDriver driver) {
// TODO Auto-generated method stub
}
public void onException(Throwable throwable, WebDriver driver) {
// TODO Auto-generated method stub
}
}
@predlapalle
Copy link

Hi,

I have my tests automated with Webdriver+Java+TestNG+Maven

I am looking for a solution wherein the progress (Step Into next step) of the test can be controlled using keyboard interrupts on every navigation.

Ex: Lets say we are automation navigation of an application. The progress of the test should be driven by a key press for every page redirection.

I am using the above implementation to achieve this. But hitting on the key is causing an infinite loop & not being detected.

Code -

@Test
public void testMethod(){
    WebDriver driver = new FirefoxDriver();
    EventFiringWebDriver efwd = new EventFiringWebDriver(driver);
    WebDriverListener eventListener = new WebDriverListener(efwd);
    efwd.register(eventListener);
    efwd.get("https://www.myshn.net/shndash");
    efwd.get("https://www.mail.google.com");

  }
}

public class WebDriverListener implements WebDriverEventListener {
private WebDriver webDriver;

public WebDriverListener(WebDriver webDriver){
    this.webDriver = webDriver;
}

public void beforeNavigateTo(String url, WebDriver driver) {

}

public void afterNavigateTo(String url, WebDriver driver) {
    final CountDownLatch latch = new CountDownLatch(1);
    KeyEventDispatcher dispatcher = new KeyEventDispatcher() {
        // Anonymous class invoked from EDT
        public boolean dispatchKeyEvent(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_SPACE)
                latch.countDown();
            return false;
        }
    };
    KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(dispatcher);
    try {
        latch.await();
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }  // current thread waits here until countDown() is called
    KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(dispatcher);
    System.out.println(this.webDriver.getTitle());
    // TODO Auto-generated method stub

        }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment