{"id":28515028,"url":"https://github.com/percy/percy-selenium-python","last_synced_at":"2026-05-06T10:01:49.572Z","repository":{"id":37958739,"uuid":"209858963","full_name":"percy/percy-selenium-python","owner":"percy","description":"Percy visual testing for Python Selenium","archived":false,"fork":false,"pushed_at":"2025-07-21T14:51:37.000Z","size":171,"stargazers_count":10,"open_issues_count":2,"forks_count":4,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-07-22T02:03:22.766Z","etag":null,"topics":["percy","percy-sdk","python","selenium","selenium-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":"2019-09-20T18:43:31.000Z","updated_at":"2025-06-04T06:52:23.000Z","dependencies_parsed_at":"2023-09-23T00:20:41.862Z","dependency_job_id":"2411e843-ac6b-4900-8805-2fdc5ac50427","html_url":"https://github.com/percy/percy-selenium-python","commit_stats":{"total_commits":37,"total_committers":4,"mean_commits":9.25,"dds":0.5675675675675675,"last_synced_commit":"ae4fe1a616ed8fa93764d53dcf38258ce8d4b878"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/percy/percy-selenium-python","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percy%2Fpercy-selenium-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percy%2Fpercy-selenium-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percy%2Fpercy-selenium-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percy%2Fpercy-selenium-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/percy","download_url":"https://codeload.github.com/percy/percy-selenium-python/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percy%2Fpercy-selenium-python/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266552590,"owners_count":23947179,"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","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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","python","selenium","selenium-python","visual-testing"],"created_at":"2025-06-09T02:35:15.078Z","updated_at":"2026-05-06T10:01:49.561Z","avatar_url":"https://github.com/percy.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# percy-selenium-python\n![Test](https://github.com/percy/percy-python-selenium/workflows/Test/badge.svg)\n\n[Percy](https://percy.io) visual testing for Python Selenium.\n\n## Installation\n\nnpm install `@percy/cli`:\n\n```sh-session\n$ npm install --save-dev @percy/cli\n```\n\npip install Percy selenium package:\n\n```ssh-session\n$ pip install percy-selenium\n```\n\n## Usage\n\nThis is an example test using the `percy_snapshot` function.\n\n``` python\nfrom percy import percy_snapshot\n\nbrowser = webdriver.Firefox()\nbrowser.get('http://example.com')\n​\n# take a snapshot\npercy_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(driver, name[, **kwargs])`\n\n- `driver` (**required**) - A selenium-webdriver driver 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### Migrating Config\n\nIf you have a previous Percy configuration file, migrate it to the newest version with the\n[`config:migrate`](https://github.com/percy/cli/tree/master/packages/cli-config#percy-configmigrate-filepath-output) command:\n\n```sh-session\n$ percy config:migrate\n```\n\n## Percy on Automate\n\n## Usage\n\nThis is an example test using the `percy_screenshot` function.\n`percy_screenshot(driver, name, options)` [ needs @percy/cli 1.27.0-beta.0+ ];\n\n``` python\nfrom percy import percy_screenshot\n\ndriver = webdriver.Remote(\"https://hub-cloud.browserstack.com/wd/hub\", caps) # using automate session\ndriver.get('http://example.com')\n​\n# take a snapshot\npercy_screenshot(driver, name = 'Screenshot 1')\n```\n\n- `driver` (**required**) - A Selenium driver 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.0-beta.0+]\n    - `full_page` - Boolean value by default it falls back to `false`, Takes full page screenshot [From CLI v1.27.6+]\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    - `ignore_region_selenium_elements` - List of selenium web-element. elements can be ignored using selenium_elements.\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    - `consider_region_selenium_elements` - List of selenium web-element. elements can be considered for diffing and will be ignored by Intelli Ignore using selenium_elements.\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, only one of the following must be provided, if this is not provided then full page will be considered as region)\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\n# we can use the createRegion function\n\nfrom percy import percy_snapshot\nfrom percy.snapshot import (create_region)\n\nobj2 = create_region(\n    algorithm=\"intellignore\",\n    diffSensitivity=2,\n    imageIgnoreThreshold=0.2,\n    carouselsEnabled=True,\n    adsEnabled=True,\n    diffIgnoreThreshold=0.4\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\n## Robot Framework Support\n\nThis package includes built-in Robot Framework support. Install the additional dependencies:\n\n```sh-session\n$ pip install robotframework robotframework-seleniumlibrary\n```\n\nThen use `PercyLibrary` in your Robot tests:\n\n```robot\n*** Settings ***\nLibrary    SeleniumLibrary\nLibrary    percy.robot_library.PercyLibrary\n\n*** Test Cases ***\nHomepage Visual Test\n    Open Browser    https://example.com    chrome\n    Percy Snapshot    Homepage\n    Percy Snapshot    Responsive    widths=375,768,1280\n    Percy Snapshot    Tagged    labels=regression,v2\n    Close Browser\n```\n\nRun with `percy exec`:\n\n```sh-session\n$ percy exec -- robot tests/\n```\n\n### Robot Keywords\n\n#### Percy Snapshot\n\n`Percy Snapshot    name    [widths]    [min_height]    [percy_css]    [scope]    [enable_javascript]    [enable_layout]    [labels]    [regions]`\n\n- `name` (**required**) - The snapshot name; must be unique to each snapshot\n- `widths` - Comma-separated responsive widths (e.g., `375,768,1280`)\n- `min_height` - Minimum screenshot height in pixels\n- `percy_css` - Custom CSS to inject before snapshot\n- `scope` - CSS selector to limit the snapshot area\n- `enable_javascript` - Enable JS in Percy rendering (default: not set)\n- `enable_layout` - Enable layout comparison mode (default: not set)\n- `labels` - Comma-separated labels/tags (e.g., `regression,homepage`)\n- `test_case` - Test case identifier\n- `regions` - JSON string of region definitions (use `Create Percy Region`)\n- `responsive_snapshot_capture` - Enable responsive capture mode\n\n#### Percy Screenshot (Automate)\n\n`Percy Screenshot    name    [options]    [ignore_region_selenium_elements]    [consider_region_selenium_elements]`\n\n#### Create Percy Region\n\n`Create Percy Region    [algorithm]    [element_css]    [element_xpath]    [bounding_box]    [padding]`\n\n```robot\n${region}=    Create Percy Region    algorithm=ignore    element_css=.ad-banner\nPercy Snapshot    Homepage    regions=${{json.dumps([${region}])}}\n```\n\n#### Percy Is Running\n\n```robot\n${running}=    Percy Is Running\nRun Keyword If    ${running}    Percy Snapshot    Homepage\n```\n\n\u003e Note: Robot Framework support is optional. If `robotframework` is not installed, the rest of `percy-selenium` works unchanged.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpercy%2Fpercy-selenium-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpercy%2Fpercy-selenium-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpercy%2Fpercy-selenium-python/lists"}