Last active
September 16, 2015 17:11
-
-
Save sri85/c5a692ec587efce030ac to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Traceback (most recent call last): | |
| File "test_1044.py", line 47, in <module> | |
| driver = EventFiringWebDriver(driver, DefaultWebDriverEventListener(driver)) | |
| NameError: name 'DefaultWebDriverEventListener' is not defined |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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