{"id":23975670,"url":"https://github.com/percy/percy-playwright-python","last_synced_at":"2025-04-13T23:34:24.101Z","repository":{"id":245821504,"uuid":"814103751","full_name":"percy/percy-playwright-python","owner":"percy","description":"Percy visual testing for Python Playwright","archived":false,"fork":false,"pushed_at":"2025-04-04T06:45:33.000Z","size":37,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-04T07:33:08.920Z","etag":null,"topics":["percy","percy-sdk","playwright","playwright-python","python","visual-testing"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/percy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-12T10:50:08.000Z","updated_at":"2024-06-25T08:12:08.000Z","dependencies_parsed_at":"2024-06-24T10:57:41.387Z","dependency_job_id":"5746984c-a302-45c3-8d46-843512823a93","html_url":"https://github.com/percy/percy-playwright-python","commit_stats":null,"previous_names":["percy/percy-playwright-python"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percy%2Fpercy-playwright-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percy%2Fpercy-playwright-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percy%2Fpercy-playwright-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percy%2Fpercy-playwright-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/percy","download_url":"https://codeload.github.com/percy/percy-playwright-python/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248796846,"owners_count":21163043,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["percy","percy-sdk","playwright","playwright-python","python","visual-testing"],"created_at":"2025-01-07T06:26:17.299Z","updated_at":"2025-04-13T23:34:24.082Z","avatar_url":"https://github.com/percy.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Percy playwright python\n![Test](https://github.com/percy/percy-playwright-python/workflows/Test/badge.svg)\n\n[Percy](https://percy.io) visual testing for Python Playwright.\n\n## Installation\n\nnpm install `@percy/cli`:\n\n```sh-session\n$ npm install --save-dev @percy/cli\n```\n\npip install Percy playwright package:\n\n```ssh-session\n$ pip install percy-playwright\n```\n\n## Usage\n\nThis is an example test using the `percy_snapshot` function.\n\n``` python\nfrom percy import percy_snapshot\n\nwith sync_playwright() as playwright:\n  browser = playwright.chromium.connect()\n  page = browser.new_page()\n  page.goto('http://example.com')\n  ​\n  # take a snapshot\n  percy_snapshot(browser, 'Python example')\n```\n\nRunning the test above normally will result in the following log:\n\n```sh-session\n[percy] Percy is not running, disabling snapshots\n```\n\nWhen running with [`percy\nexec`](https://github.com/percy/cli/tree/master/packages/cli-exec#percy-exec), and your project's\n`PERCY_TOKEN`, a new Percy build will be created and snapshots will be uploaded to your project.\n\n```sh-session\n$ export PERCY_TOKEN=[your-project-token]\n$ percy exec -- [python test command]\n[percy] Percy has started!\n[percy] Created build #1: https://percy.io/[your-project]\n[percy] Snapshot taken \"Python example\"\n[percy] Stopping percy...\n[percy] Finalized build #1: https://percy.io/[your-project]\n[percy] Done!\n```\n\n## Configuration\n\n`percy_snapshot(page, name[, **kwargs])`\n\n- `page` (**required**) - A playwright page instance\n- `name` (**required**) - The snapshot name; must be unique to each snapshot\n- `**kwargs` - [See per-snapshot configuration options](https://www.browserstack.com/docs/percy/take-percy-snapshots/overview#per-snapshot-configuration)\n\n\n## Percy on Automate\n\n## Usage\n\n``` python\nfrom playwright.sync_api import sync_playwright\nfrom percy import percy_screenshot, percy_snapshot\n\ndesired_cap = {\n  'browser': 'chrome',\n  'browser_version': 'latest',\n  'os': 'osx',\n  'os_version': 'ventura',\n  'name': 'Percy Playwright PoA Demo',\n  'build': 'percy-playwright-python-tutorial',\n  'browserstack.username': 'username',\n  'browserstack.accessKey': 'accesskey'\n}\n\nwith sync_playwright() as playwright:\n  cdpUrl = 'wss://cdp.browserstack.com/playwright?caps=' + urllib.parse.quote(json.dumps(desired_cap))\n  browser = playwright.chromium.connect(cdpUrl)\n  page = browser.new_page()\n  page.goto(\"https://percy.io/\")\n  percy_screenshot(page, name = \"Screenshot 1\")\n```\n# take a snapshot\n```python\npercy_screenshot(page, name = 'Screenshot 1')\n```\n\n- `page` (**required**) - A Playwright page instance\n- `name` (**required**) - The screenshot name; must be unique to each screenshot\n- `options` (**optional**) - There are various options supported by percy_screenshot to server further functionality.\n    - `sync` - Boolean value by default it falls back to `false`, Gives the processed result around screenshot [From CLI v1.28.8]\n    - `full_page` - Boolean value by default it falls back to `false`, Takes full page screenshot [From CLI v1.28.8]\n    - `freeze_animated_image` - Boolean value by default it falls back to `false`, you can pass `true` and percy will freeze image based animations.\n    - `freeze_image_by_selectors` -List of selectors. Images will be freezed which are passed using selectors. For this to work `freeze_animated_image` must be set to true.\n    - `freeze_image_by_xpaths` - List of xpaths. Images will be freezed which are passed using xpaths. For this to work `freeze_animated_image` must be set to true.\n    - `percy_css` - Custom CSS to be added to DOM before the screenshot being taken. Note: This gets removed once the screenshot is taken.\n    - `ignore_region_xpaths` - List of xpaths. elements in the DOM can be ignored using xpath\n    - `ignore_region_selectors` - List of selectors. elements in the DOM can be ignored using selectors.\n    - `custom_ignore_regions` -  List of custom objects. elements can be ignored using custom boundaries. Just passing a simple object for it like below.\n      - example: ```{\"top\": 10, \"right\": 10, \"bottom\": 120, \"left\": 10}```\n      - In above example it will draw rectangle of ignore region as per given coordinates.\n          - `top` (int): Top coordinate of the ignore region.\n          - `bottom` (int): Bottom coordinate of the ignore region.\n          - `left` (int): Left coordinate of the ignore region.\n          - `right` (int): Right coordinate of the ignore region.\n    - `consider_region_xpaths` - List of xpaths. elements in the DOM can be considered for diffing and will be ignored by Intelli Ignore using xpaths.\n    - `consider_region_selectors` - List of selectors. elements in the DOM can be considered for diffing and will be ignored by Intelli Ignore using selectors.\n    - `custom_consider_regions` - List of custom objects. elements can be considered for diffing and will be ignored by Intelli Ignore using custom boundaries\n      - example:```{\"top\": 10, \"right\": 10, \"bottom\": 120, \"left\": 10}```\n      - In above example it will draw rectangle of consider region will be drawn.\n      - Parameters:\n        - `top` (int): Top coordinate of the consider region.\n        - `bottom` (int): Bottom coordinate of the consider region.\n        - `left` (int): Left coordinate of the consider region.\n        - `right` (int): Right coordinate of the consider region.\n    - `regions` parameter that allows users to apply snapshot options to specific areas of the page. This parameter is an array where each object defines a custom region with configurations.\n      - Parameters:\n        - `elementSelector` (optional)\n            - `boundingBox` (object): Defines the coordinates and size of the region.\n              - `x` (number): X-coordinate of the region.\n              - `y` (number): Y-coordinate of the region.\n              - `width` (number): Width of the region.\n              - `height` (number): Height of the region.\n            - `elementXpath` (string): The XPath selector for the element.\n            - `elementCSS` (string): The CSS selector for the element.\n\n        - `algorithm` (mandatory)\n            - Specifies the snapshot comparison algorithm.\n            - Allowed values: `standard`, `layout`, `ignore`, `intelliignore`.\n\n        - `configuration` (required for `standard` and `intelliignore` algorithms, ignored otherwise)\n            - `diffSensitivity` (number): Sensitivity level for detecting differences.\n            - `imageIgnoreThreshold` (number): Threshold for ignoring minor image differences.\n            - `carouselsEnabled` (boolean): Whether to enable carousel detection.\n            - `bannersEnabled` (boolean): Whether to enable banner detection.\n            - `adsEnabled` (boolean): Whether to enable ad detection.\n\n         - `assertion` (optional)\n            - Defines assertions to apply to the region.\n            - `diffIgnoreThreshold` (number): The threshold for ignoring minor differences.\n\n### Example Usage for regions\n\n```\nobj1 = {\n  \"elementSelector\": {\n    \"elementCSS\": \".ad-banner\" \n  },\n  \"algorithm\": \"intelliignore\",\n  \"configuration\": {\n    \"diffSensitivity\": 2,\n    \"imageIgnoreThreshold\": 0.2,\n    \"carouselsEnabled\": true,\n    \"bannersEnabled\": true,\n    \"adsEnabled\": true\n  },\n  \"assertion\": {\n    \"diffIgnoreThreshold\": 0.4,\n  }\n};\n\npercy_snapshot(page, name=\"Homepage\", regions: [obj1]);\n```\n\n\n### Creating Percy on automate build\nNote: Automate Percy Token starts with `auto` keyword. The command can be triggered using `exec` keyword.\n\n```sh-session\n$ export PERCY_TOKEN=[your-project-token]\n$ percy exec -- [python test command]\n[percy] Percy has started!\n[percy] [Python example] : Starting automate screenshot ...\n[percy] Screenshot taken \"Python example\"\n[percy] Stopping percy...\n[percy] Finalized build #1: https://percy.io/[your-project]\n[percy] Done!\n```\n\nRefer to docs here: [Percy on Automate](https://www.browserstack.com/docs/percy/integrate/functional-and-visual)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpercy%2Fpercy-playwright-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpercy%2Fpercy-playwright-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpercy%2Fpercy-playwright-python/lists"}