I'm new to Robot Framework. I'm trying to implement WebDriver Event Listeners by importing Selenium Library.
In my Test case, I have this import
Library SeleniumLibrary event_firing_webdriver=${CURDIR}/RobotFrameworkListener.py
In RobotFrameworkListener.py file,
from robot.api import logger
from selenium.webdriver.support.events import AbstractEventListener
from robot.libraries.BuiltIn import BuiltIn
from selenium.webdriver.support.events import EventFiringWebDriver
selib = BuiltIn().get_library_instance("SeleniumLibrary")
driver = selib.driver
class RobotFrameworkListener(AbstractEventListener):
def before_navigate_to(self, url, driver):
logger.info("URL before navigation: '%s'." % url)
def after_navigate_to(self, url, driver):
logger.info("URL after navigation: '%s'." % driver.current_url)
def before_change_value_of(self, element, driver):
dict= element.get_property('attributes')
element_value = dict[2]['value']
logger.info("Before clearing/entering the text field '%s'." % element_value)
def after_change_value_of(self, element, driver):
dict= element.get_property('attributes')
element_value = dict[2]['value']
logger.info("After clearing/entering the text field '%s'." % element_value)
So could some one help me on how to trigger listeners for my main Test case so that I can do an action on web driver events like after click, before click, after entering the text etc? Let me know if there is any other way to do it :) Thanks in advance!
I commented some lines in your listener, and it worked:
RobotFrameworkListener.py file:
from robot.api import logger
from selenium.webdriver.support.events import AbstractEventListener
from robot.libraries.BuiltIn import BuiltIn
# from selenium.webdriver.support.events import EventFiringWebDriver
# selib = BuiltIn().get_library_instance("SeleniumLibrary")
# driver = selib.driver
class RobotFrameworkListener(AbstractEventListener):
def before_navigate_to(self, url, driver):
logger.info("URL before navigation: '%s'." % url)
def after_navigate_to(self, url, driver):
logger.info("URL after navigation: '%s'." % driver.current_url)
def before_change_value_of(self, element, driver):
dict= element.get_property('attributes')
element_value = dict[2]['value']
logger.info("Before clearing/entering the text field '%s'." % element_value)
def after_change_value_of(self, element, driver):
dict= element.get_property('attributes')
element_value = dict[2]['value']
logger.info("After clearing/entering the text field '%s'." % element_value)
Test Case:
*** Settings ***
Documentation This is a test suite to test SO question: https://stackoverflow.com/questions/79503722/how-to-implement-webdriver-event-listeners-in-robot-framework
Suite Teardown Close All Browsers
Library SeleniumLibrary event_firing_webdriver=${CURDIR}/RobotFrameworkListener.py
*** Variables ***
${URL} https://github.com/robotframework/SeleniumLibrary
${ISSUES} ${URL}/issues
${BROWSER} Chrome
*** Test Cases ***
Open Browser To Start Page
Open Browser ${URL} ${BROWSER}
Event Firing Webdriver Go To (WebDriver)
Go To ${ISSUES}
Event Firing Webdriver Click Element (WebElement)
Click Element repository-input
Event Firing Webdriver Input Text (WebElement)
Input Text repository-input FooBar