# get browser cookies in all automation frameworks ## selenium ```javascript driver.manage().getCookies(); ``` ## WDIO ### >= v5 ```javascript browser.getCookies(names?) ``` ### <= v4 ```javascript browser.getCookie(name?); browser.cookie([method][,args]); ``` ## cypress ```javascript cy.getCookies(options?) ``` ## nightwatch ```javascript browser.getCookies(callback) ``` ## playwright ```javascript const context = await browser.newContext(); await context.cookies([urls?]) ``` ## protractor ```javascript await browser.manage().getCookies() ``` ## puppeteer ```javascript await page.cookies([...urls?]) ``` ## storybook ```javascript await page.cookies([...urls?]) ``` ## testcafe ```javascript import {ClientFunction} from 'testcafe'; const getCookies = ClientFunction(() => document.cookie); ``` # cookie restrictions https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies in order to get all CORS cookies, a cookie must have the following properties: - `secure: true` (`Secure`) - `sameSite: 'none'` (`SameSite: None`) # behavior ## http ```javascript {domain: 'localhost', path: '/images/', secure: true, sameSite: 'none'} // no cookies when running driver.getCookies() // browser shows cookie correctly and gets image ``` ```javascript {domain: 'localhost'} // cookies available when driver.getCookies() // browser shows cookies correctly and gets image //cookie (not the cookie we are after - see path property): {domain:'localhost', httpOnly:false, name:'token', path:'/', secure:false, value:'12345'} ``` ## https ```javascript // thelocalnetwork is mapped to localhost in /etc/hosts // both local servers are served over https // chrome is started with a flag to disable ssl cert checks { domain: 'thelocalnetwork', secure: true, sameSite: 'none', path: '/images/' } await driver.manage().getCookies() // [] const client = await CDP({port: 9222}) await client.send('Network.getAllCookies') // [Array(1)] ``` ## cdp commands ```javascript // using cdp when available, can get all browser cookies when driver can't {domain: 'localhost', path: '/images/', secure: true, sameSite: 'none'} await driver.manage().getCookies() // [] const client = await CDP({port: 9222}) await client.send('Network.getAllCookies') // [Array(1)] ``` ``` TODO: - implement CDP get cookies in spec-driver selenium - validate results - move to vgc - implment logic for cookie filter and fetch reosource ``` | Framework | Cookies | CDP Cookies | | -------- | -------- | -------- | | eyes-nightwatch| Yes | No | | eyes-protractor| Yes| Yes| | eyes-playwright| Yes| Yes| | eyes-selenium| Yes| Yes| | eyes-selenium-3| Yes| Yes| | eyes-webdriverio-4| Yes| Yes| | eyes-webdriverio-5| Yes| Yes|