percy-selenium


Namepercy-selenium JSON
Version 2.1.2 PyPI version JSON
download
home_pagehttps://github.com/percy/percy-selenium-python
SummaryPython client for visual testing with Percy
upload_time2025-04-25 06:41:55
maintainerNone
docs_urlNone
authorPerceptual Inc.
requires_python>=3.6
licenseMIT
keywords selenium percy visual testing
VCS
bugtrack_url
requirements selenium requests
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # percy-selenium-python
![Test](https://github.com/percy/percy-python-selenium/workflows/Test/badge.svg)

[Percy](https://percy.io) visual testing for Python Selenium.

## Installation

npm install `@percy/cli`:

```sh-session
$ npm install --save-dev @percy/cli
```

pip install Percy selenium package:

```ssh-session
$ pip install percy-selenium
```

## Usage

This is an example test using the `percy_snapshot` function.

``` python
from percy import percy_snapshot

browser = webdriver.Firefox()
browser.get('http://example.com')
​
# take a snapshot
percy_snapshot(browser, 'Python example')
```

Running the test above normally will result in the following log:

```sh-session
[percy] Percy is not running, disabling snapshots
```

When running with [`percy
exec`](https://github.com/percy/cli/tree/master/packages/cli-exec#percy-exec), and your project's
`PERCY_TOKEN`, a new Percy build will be created and snapshots will be uploaded to your project.

```sh-session
$ export PERCY_TOKEN=[your-project-token]
$ percy exec -- [python test command]
[percy] Percy has started!
[percy] Created build #1: https://percy.io/[your-project]
[percy] Snapshot taken "Python example"
[percy] Stopping percy...
[percy] Finalized build #1: https://percy.io/[your-project]
[percy] Done!
```

## Configuration

`percy_snapshot(driver, name[, **kwargs])`

- `driver` (**required**) - A selenium-webdriver driver instance
- `name` (**required**) - The snapshot name; must be unique to each snapshot
- `**kwargs` - [See per-snapshot configuration options](https://www.browserstack.com/docs/percy/take-percy-snapshots/overview#per-snapshot-configuration)

### Migrating Config

If you have a previous Percy configuration file, migrate it to the newest version with the
[`config:migrate`](https://github.com/percy/cli/tree/master/packages/cli-config#percy-configmigrate-filepath-output) command:

```sh-session
$ percy config:migrate
```

## Percy on Automate

## Usage

This is an example test using the `percy_screenshot` function.
`percy_screenshot(driver, name, options)` [ needs @percy/cli 1.27.0-beta.0+ ];

``` python
from percy import percy_screenshot

driver = webdriver.Remote("https://hub-cloud.browserstack.com/wd/hub", caps) # using automate session
driver.get('http://example.com')
​
# take a snapshot
percy_screenshot(driver, name = 'Screenshot 1')
```

- `driver` (**required**) - A Selenium driver instance
- `name` (**required**) - The screenshot name; must be unique to each screenshot
- `options` (**optional**) - There are various options supported by percy_screenshot to server further functionality.
    - `sync` - Boolean value by default it falls back to `false`, Gives the processed result around screenshot [From CLI v1.28.0-beta.0+]
    - `full_page` - Boolean value by default it falls back to `false`, Takes full page screenshot [From CLI v1.27.6+]
    - `freeze_animated_image` - Boolean value by default it falls back to `false`, you can pass `true` and percy will freeze image based animations.
    - `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.
    - `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.
    - `percy_css` - Custom CSS to be added to DOM before the screenshot being taken. Note: This gets removed once the screenshot is taken.
    - `ignore_region_xpaths` - List of xpaths. elements in the DOM can be ignored using xpath
    - `ignore_region_selectors` - List of selectors. elements in the DOM can be ignored using selectors.
    - `ignore_region_selenium_elements` - List of selenium web-element. elements can be ignored using selenium_elements.
    - `custom_ignore_regions` -  List of custom objects. elements can be ignored using custom boundaries. Just passing a simple object for it like below.
      - example: ```{"top": 10, "right": 10, "bottom": 120, "left": 10}```
      - In above example it will draw rectangle of ignore region as per given coordinates.
          - `top` (int): Top coordinate of the ignore region.
          - `bottom` (int): Bottom coordinate of the ignore region.
          - `left` (int): Left coordinate of the ignore region.
          - `right` (int): Right coordinate of the ignore region.
    - `consider_region_xpaths` - List of xpaths. elements in the DOM can be considered for diffing and will be ignored by Intelli Ignore using xpaths.
    - `consider_region_selectors` - List of selectors. elements in the DOM can be considered for diffing and will be ignored by Intelli Ignore using selectors.
    - `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.
    - `custom_consider_regions` - List of custom objects. elements can be considered for diffing and will be ignored by Intelli Ignore using custom boundaries
      - example:```{"top": 10, "right": 10, "bottom": 120, "left": 10}```
      - In above example it will draw rectangle of consider region will be drawn.
      - Parameters:
        - `top` (int): Top coordinate of the consider region.
        - `bottom` (int): Bottom coordinate of the consider region.
        - `left` (int): Left coordinate of the consider region.
        - `right` (int): Right coordinate of the consider region.
    - `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.
      - Parameters:
        - `elementSelector` (optional, only one of the following must be provided, if this is not provided then full page will be considered as region)
            - `boundingBox` (object): Defines the coordinates and size of the region.
              - `x` (number): X-coordinate of the region.
              - `y` (number): Y-coordinate of the region.
              - `width` (number): Width of the region.
              - `height` (number): Height of the region.
            - `elementXpath` (string): The XPath selector for the element.
            - `elementCSS` (string): The CSS selector for the element.

        - `algorithm` (mandatory)
            - Specifies the snapshot comparison algorithm.
            - Allowed values: `standard`, `layout`, `ignore`, `intelliignore`.

        - `configuration` (required for `standard` and `intelliignore` algorithms, ignored otherwise)
            - `diffSensitivity` (number): Sensitivity level for detecting differences.
            - `imageIgnoreThreshold` (number): Threshold for ignoring minor image differences.
            - `carouselsEnabled` (boolean): Whether to enable carousel detection.
            - `bannersEnabled` (boolean): Whether to enable banner detection.
            - `adsEnabled` (boolean): Whether to enable ad detection.

         - `assertion` (optional)
            - Defines assertions to apply to the region.
            - `diffIgnoreThreshold` (number): The threshold for ignoring minor differences.

### Example Usage for regions

```
obj1 = {
  "elementSelector": {
    "elementCSS": ".ad-banner" 
  },
  "algorithm": "intelliignore",
  "configuration": {
    "diffSensitivity": 2,
    "imageIgnoreThreshold": 0.2,
    "carouselsEnabled": true,
    "bannersEnabled": true,
    "adsEnabled": true
  },
  "assertion": {
    "diffIgnoreThreshold": 0.4,
  }
};

# we can use the createRegion function

from percy import percy_snapshot
from percy.snapshot import (create_region)

obj2 = create_region(
    algorithm="intellignore",
    diffSensitivity=2,
    imageIgnoreThreshold=0.2,
    carouselsEnabled=True,
    adsEnabled=True,
    diffIgnoreThreshold=0.4
)

percy_snapshot(page, name="Homepage", regions=[obj1]);
```


### Creating Percy on automate build
Note: Automate Percy Token starts with `auto` keyword. The command can be triggered using `exec` keyword.

```sh-session
$ export PERCY_TOKEN=[your-project-token]
$ percy exec -- [python test command]
[percy] Percy has started!
[percy] [Python example] : Starting automate screenshot ...
[percy] Screenshot taken "Python example"
[percy] Stopping percy...
[percy] Finalized build #1: https://percy.io/[your-project]
[percy] Done!
```

Refer to docs here: [Percy on Automate](https://www.browserstack.com/docs/percy/integrate/functional-and-visual)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/percy/percy-selenium-python",
    "name": "percy-selenium",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": null,
    "keywords": "selenium percy visual testing",
    "author": "Perceptual Inc.",
    "author_email": "team@percy.io",
    "download_url": "https://files.pythonhosted.org/packages/53/ba/66616c473bcb4b2a29cc345aa827d47895014bf0c3285966bc8092f4c494/percy_selenium-2.1.2.tar.gz",
    "platform": null,
    "description": "# 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\u200b\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\u200b\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",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Python client for visual testing with Percy",
    "version": "2.1.2",
    "project_urls": {
        "Homepage": "https://github.com/percy/percy-selenium-python"
    },
    "split_keywords": [
        "selenium",
        "percy",
        "visual",
        "testing"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "61d7574c11780f82a65cbc98b939dba70df424817523b390f660381c5b080868",
                "md5": "d55b0ccfde7998ef75a4a870519385f2",
                "sha256": "bf2564e5cbbc665bf7850d4d811904681b02d2476cbc53fe9957e64c96595fa7"
            },
            "downloads": -1,
            "filename": "percy_selenium-2.1.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "d55b0ccfde7998ef75a4a870519385f2",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 10377,
            "upload_time": "2025-04-25T06:41:54",
            "upload_time_iso_8601": "2025-04-25T06:41:54.535985Z",
            "url": "https://files.pythonhosted.org/packages/61/d7/574c11780f82a65cbc98b939dba70df424817523b390f660381c5b080868/percy_selenium-2.1.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "53ba66616c473bcb4b2a29cc345aa827d47895014bf0c3285966bc8092f4c494",
                "md5": "fa6db504cec9587e2d5bba482eee16fd",
                "sha256": "c26e40b8169ee6d985a68907a86f62b3342fb26a8c793142fcd9a86a3ed40fe7"
            },
            "downloads": -1,
            "filename": "percy_selenium-2.1.2.tar.gz",
            "has_sig": false,
            "md5_digest": "fa6db504cec9587e2d5bba482eee16fd",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 17169,
            "upload_time": "2025-04-25T06:41:55",
            "upload_time_iso_8601": "2025-04-25T06:41:55.419767Z",
            "url": "https://files.pythonhosted.org/packages/53/ba/66616c473bcb4b2a29cc345aa827d47895014bf0c3285966bc8092f4c494/percy_selenium-2.1.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-04-25 06:41:55",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "percy",
    "github_project": "percy-selenium-python",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "selenium",
            "specs": [
                [
                    ">=",
                    "3"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    "==",
                    "2.*"
                ]
            ]
        }
    ],
    "lcname": "percy-selenium"
}
        
Elapsed time: 1.27107s