diff --git a/docs/cookies.rst b/docs/cookies.rst index 18a72f373..db3cb85b5 100644 --- a/docs/cookies.rst +++ b/docs/cookies.rst @@ -23,6 +23,7 @@ For add a cookie use the add method: browser.cookies.add({'whatever': 'and ever'}) + Retrieve all cookies -------------------- diff --git a/splinter/cookie_manager.py b/splinter/cookie_manager.py index 5bb6af9ba..32036211e 100644 --- a/splinter/cookie_manager.py +++ b/splinter/cookie_manager.py @@ -52,10 +52,12 @@ def delete(self, *cookies): """ raise NotImplementedError - def all(self): + def all(self, info=False): """ Returns all of the cookies. + **Note:** If you're using any webdriver and want more info about the cookie, set the `info` parameter to `True` (in other drivers, it won't make any difference). In this case, this method will return a list of dicts, each with one cookie's info. + Examples: >>> cookie_manager.add({'name': 'Tony'}) diff --git a/splinter/driver/djangoclient.py b/splinter/driver/djangoclient.py index 2cd5625fe..9c12ca74c 100644 --- a/splinter/driver/djangoclient.py +++ b/splinter/driver/djangoclient.py @@ -37,8 +37,12 @@ def delete(self, *cookies): else: self._cookies.clear() - def all(self): - return self._cookies.items() + def all(self, info=False): + cookies = [] + for key, value in self._cookies.items(): + item = {key: value} + cookies.append(item) + return cookies def __getitem__(self, item): return self._cookies[item].value diff --git a/splinter/driver/webdriver/cookie_manager.py b/splinter/driver/webdriver/cookie_manager.py index c91409ffe..1212a12c1 100644 --- a/splinter/driver/webdriver/cookie_manager.py +++ b/splinter/driver/webdriver/cookie_manager.py @@ -4,6 +4,7 @@ # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +from urlparse import urlparse from splinter.cookie_manager import CookieManagerAPI @@ -23,7 +24,16 @@ def delete(self, *cookies): else: self.driver.delete_all_cookies() - def all(self): + def all(self, info=False): + if not info: + cleaned_cookies = [] + cookies = self.driver.get_cookies() + for cookie in cookies: + cookie_domain = cookie['domain'] if not cookie['domain'].startswith('.') else cookie['domain'][1:] + if cookie_domain in urlparse(self.driver.current_url).netloc: + cookie = {cookie['name']: cookie['value']} + cleaned_cookies.append(cookie) + return cleaned_cookies return self.driver.get_cookies() def __getitem__(self, item): diff --git a/splinter/driver/zopetestbrowser.py b/splinter/driver/zopetestbrowser.py index 5ddc5b984..2c85bf973 100644 --- a/splinter/driver/zopetestbrowser.py +++ b/splinter/driver/zopetestbrowser.py @@ -38,8 +38,12 @@ def delete(self, *cookies): else: self._cookies.clearAll() - def all(self): - return self._cookies.items() + def all(self, info=False): + cookies = [] + for key, value in self._cookies.items(): + item = {key: value} + cookies.append(item) + return cookies def __getitem__(self, item): return self._cookies[item]