Skip to content

Instantly share code, notes, and snippets.

@sri85
Last active September 16, 2015 17:11
Show Gist options
  • Select an option

  • Save sri85/c5a692ec587efce030ac to your computer and use it in GitHub Desktop.

Select an option

Save sri85/c5a692ec587efce030ac to your computer and use it in GitHub Desktop.
Traceback (most recent call last):
File "test_1044.py", line 47, in <module>
driver = EventFiringWebDriver(driver, DefaultWebDriverEventListener(driver))
NameError: name 'DefaultWebDriverEventListener' is not defined
from selenium import webdriver
from selenium.webdriver.support.event_firing_webdriver import EventFiringWebDriver
from selenium.webdriver.support.abstract_event_listener import AbstractEventListener
class WebDriverExtensions(object):
def wait_until(self, func, timeout, timeout_message):
"""
:type self: selenium.webdriver.remote.webdriver.WebDriver
"""
WebDriverWait(self, timeout).until(
lambda method: func(), timeout_message)
return self
@staticmethod
def patch(driver):
"""
:type driver: selenium.webdriver.remote.webdriver.WebDriver
"""
driver.wait_until = WebDriverExtensions().wait_until
driver.wait = PSWait(driver)
return driver
class PSWait(object):
def __init__(self, driver):
self.driver = driver
def _wait_until_visible(self, locator, timeout, message, is_visible):
if message is None:
message = "Could not find {} in {} seconds".format(str(locator), timeout)
wait = WebDriverWait(self.driver, timeout)
if is_visible:
wait.until(EC.visibility_of_element_located(locator), message=message)
else:
wait.until(EC.invisibility_of_element_located(locator), message=message)
def until_visible(self, locator, timeout=3, message=None):
self._wait_until_visible(locator, timeout, message, True)
def until_not_visible(self, locator, timeout=3, message=None):
self._wait_until_visible(locator, timeout, message, False)
class DefaultWebDriverEventListener(AbstractEventListener):
logger = None
def __init__(self, logger):
self.logger = logger
def on_exception(self, exception, driver):
self.logger.info("Exception raised: " + str(exception))
def before_click(self, element, driver):
self.logger.info("Clicking element")
def before_find(self, by, value, driver):
self.logger.info("Locating element by " + str(by) + " " + str(value))
driver = webdriver.Firefox()
driver = WebDriverExtensions.patch(driver)
driver = EventFiringWebDriver(driver, DefaultWebDriverEventListener(logger))
driver.get('http://google.com')
print(driver.find_element_by_id('prm').text)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment