Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set a cookie to a specific domain in selenium webdriver with python?

Tags:

Hello fellow StackOverflow users. What I am trying to achieve is prevent annoying helper boxes from popping up when my tests open the main page. So far this is the method I am using to open the main page:

def open_url(self, url):
    """Open a URL using the driver's base URL"""
    self.webdriver.add_cookie({'name' : 'tour.index', 'value' : 'complete', 'domain' : self.store['base'] + url})
    self.webdriver.add_cookie({'name' : 'tour.map', 'value' : 'complete', 'domain' : self.store['base'] + url})
    self.webdriver.get(self.store['base'] + url)

However, what returns after I run the test is this:

2014-07-23 15:38:19.453057: X Message: u'You may only set cookies for the current domain' ;

How can I set the cookie before I actually load the base testing domain?

like image 807
yanki Avatar asked Jul 23 '14 19:07

yanki


People also ask

How can a Selenium developer clear a specific cookie information?

Navigate to the chrome settings page with Selenium by executing the driver. get('chrome://settings/clearBrowserData') . Click on the Clear Data button to clear the cache.

Which method is used to access cookies Selenium?

Using Selenium WebDriver API, we can query and interact with browser cookies with the help of following WebDriver's built-in methods. Get Cookies: This statement is used to return the list of all Cookies stored in web browser. manage(). getCookies();


1 Answers

The documentation suggests navigating to a dummy url (such as a 404 page, or the path to an image) before setting the cookies. Then, set the cookies, then navigate to your main page.

Selenium Documentation - Cookies

... you need to be on the domain that the cookie will be valid for. If you are trying to preset cookies before you start interacting with a site ... an alternative is to find a smaller page on the site ... (http://example.com/some404page)

So, your code might look like this:

def open_url(self, url):
    """Open a URL using the driver's base URL"""

    dummy_url = '/404error'
    # Or this
    #dummy_url = '/path/to/an/image.jpg'

    # Navigate to a dummy url on the same domain.
    self.webdriver.get(self.store['base'] + dummy_url)

    # Proceed as before
    self.webdriver.add_cookie({'name' : 'tour.index', 'value' : 'complete', 'domain' : self.store['base'] + url})
    self.webdriver.add_cookie({'name' : 'tour.map', 'value' : 'complete', 'domain' : self.store['base'] + url})
    self.webdriver.get(self.store['base'] + url)
like image 106
Christian Long Avatar answered Oct 03 '22 16:10

Christian Long