How to implement a WebDriverEventListener in C#?

后端 未结 5 807
感情败类
感情败类 2021-01-01 06:01

How to implement WebDriverEventListener in C#?

I have no problem doing it in java importing:

import org.openqa.selenium.support.events.A         


        
相关标签:
5条回答
  • 2021-01-01 06:29

    Ensuring that webdriver intiated properly:

    class WebDriverActionListener : EventFiringWebDriver
        {
     private IWebDriver _driver;
    
            public WebDriverActionListener(IWebDriver _driver): base(_driver)
            {
                this._driver = _driver;
                _driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(60));
            }
    
            protected override void OnElementClicking(WebElementEventArgs e)
            {
                _driver.Sync();
                string type = getTypeofElement(e.Element.TagName);
                base.OnElementClicking(e);
                Reporter.Logtofile("Clicked on element:" +e.Element.Text + " of type:" + type,Status.Info);
                _driver.Sync();
            }
    }
    
    0 讨论(0)
  • 2021-01-01 06:33

    Event listening in the C# is accomplished by using the standard event mechanism exposed by the language. You create a method with the correct signature for the event, and attach it to the event. An example method would look like this:

    void MyElementClickedHandler(object sender, WebElementEventArgs e)
    {
        Console.WriteLine("Clicked");
    }
    

    Attaching the event would look something like this:

    // Assumes driver is a properly created
    // IWebDriver instance. 
    IWebDriver eventDriver = new EventFiringWebDriver(driver);
    eventDriver.ElementClicked += new EventHandler<WebElementEventArgs>(MyElementClickedHandler);
    

    Inside the event handler method, the EventArgs parameter allows you to examine attributes associated with the event. In the case of an element event, the EventArgs will have a reference to the IWebElement the event fired on. To disconnect the event handler, you use the standard C# -= operator.

    0 讨论(0)
  • 2021-01-01 06:34

    You have to add Selenium.support.dll to your project.

    Define and instantiate, event firing driver as below:

    IWebDriver driver = new FirefoxDriver();
    
    EventFiringWebDriver firingDriver = new EventFiringWebDriver(driver);
    firingDriver.ElementClicked += new EventHandler<WebElementEventArgs>(firingDriver_ElementClicked);
    

    For event to fire:

    firingDriver.findElement(By.xpath("...").click();
    

    Event is defined as:

    private void firingDriver_ElementClicked(object sender, WebDriverExceptionEventArgs e) {
        // do action required to handle what happens after clicking button you have mentioned.
    }
    

    EventFiringDriver selenium source code is here and its corresponding tests are here, for your reference.

    0 讨论(0)
  • 2021-01-01 06:35

    yet another simpler solution for site navigation.

    1. Create & Register EventFiring driver
    var driver = new ChromeDriver();
    EventFiringWebDriver firingDriver = new EventFiringWebDriver(driver);
    firingDriver.Navigating += FiringDriver_Navigating;
    firingDriver.Navigated += FiringDriver_Navigated;
    firingDriver.Navigate().GoToUrl(@"https://www.selenium.dev/");
    
    1. Declare the Event
     private static void FiringDriver_Navigating(object sender, WebDriverNavigationEventArgs e)
    {
        Console.WriteLine("NAVIGATING  - " + e.Url);
    }
    
    private static void FiringDriver_Navigated(object sender, WebDriverNavigationEventArgs e)
    {
        Console.WriteLine("SITE LOADED - " + e.Url);
    }
    
    0 讨论(0)
  • 2021-01-01 06:41

    This link gives a nice explanation of event handling for selenium:

    The events mechanism in WebDriver is composed of two major objects:

    EventFiringWebDriver - A wrapper of the normal WebDriver API but adds the support of event triggering.
    WebDriverEventListener - An interface with pre-defined events that EventFiringWebDriver instance will trigger.

    Implementation of Event handling in Selenium as Class Diagram:

    Step 1: Create a class implementing WebDriverEventListener.

    public class DefaultWebDriverEventListener implements WebDriverEventListener {
    
        public void beforeNavigateTo(String url, WebDriver driver) {
            System.out.println("Driver will navigate to:" + url);
        }
    
       ...
    }
    

    Step 2: Initalize event-firing driver using the webdriver instance you have created

    //initalize FireFox webdriver instance
    WebDriver driver = new FirefoxDriver();
    //initalize event-firing driver using Firefox webdriver instance.
    EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver); 
    

    Step 3: Register the listener

    //register event listener to even-firing webdriver instance
    eventDriver.register(listener);
    

    Now all the defined events in your implemented class will be executed when the selenium is executing. For instance, taking screenshot on exception etc.

    Step 4: You can also unregister the listener if you want to stop firing events when selenium

    eventDriver.unregister(listener);
    
    0 讨论(0)
提交回复
热议问题