playwright-python icon indicating copy to clipboard operation
playwright-python copied to clipboard

[Bug]: context.add_cookies set just one cookie instead of all cookies

Open yixinBC opened this issue 6 months ago • 2 comments

Version

1.52.0

Steps to reproduce

I just use playwright's python bindings, and here's my test code.

from playwright.sync_api import sync_playwright
true = True
false = False
cookies = [
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "a",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "b",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "c",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "d",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".xxx.example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "e",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".xxx.example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "f",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": "h5.xxx.example.com",
        "hostOnly": true,
        "httpOnly": false,
        "name": "g",
        "path": "/",
        "sameSite": "None",
        "secure": true,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "h",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "i",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "j",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "",
    },
    {
        "domain": "h5.xxx.example.com",
        "hostOnly": true,
        "httpOnly": false,
        "name": "k",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "l",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "m",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "n",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": true,
        "name": "o",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "p",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": true,
        "name": "q",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": true,
        "name": "r",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "s",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "t",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "u",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
    {
        "domain": ".example.com",
        "hostOnly": false,
        "httpOnly": false,
        "name": "v",
        "path": "/",
        "sameSite": "None",
        "secure": false,
        "session": false,
        "storeId": "0",
        "value": "filtered",
    },
]

def test_cookie():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        context = browser.new_context()
        print(f"===Cookies before adding: {context.cookies()}===")
        context.add_cookies(cookies)
        print(f"===Cookies after adding: {context.cookies()}===")
        assert context.cookies() == cookies
        context.close()
        browser.close()
if __name__ == "__main__":
    test_cookie()
    print("===Test completed successfully.===")

Expected behavior

Cookies after adding will be the same as cookies variable, and pass the assert.

Actual behavior

Cookies after adding is [{'name': 'g', 'value': 'filtered', 'domain': 'h5.xxx.example.com', 'path': '/', 'expires': -1, 'httpOnly': False, 'secure': True, 'sameSite': 'None'}] . So there's an AssertionError.

Additional context

No response

Environment

- Operating System: [MacOS X 15.1]
- CPU: [x86_64]
- Browser: [Chromium]
- Python Version: [3.12]
- Other info:

yixinBC avatar Jun 23 '25 08:06 yixinBC

~Maybe httpOnly field causes that bug? I found only "g" set that field to true.Is this expected behavior?~

Edit: set that field not work :(

yixinBC avatar Jun 24 '25 11:06 yixinBC