Skip to main content

A nice way of implementing the Page Object pattern.

Project description

PyPI PyPI - Python Version GitHub Updates https://travis-ci.org/jsfehler/stere.svg?branch=master https://coveralls.io/repos/github/jsfehler/stere/badge.svg?branch=master https://api.codacy.com/project/badge/Grade/e791ab09e14c4483943a26a2fd180577 https://saucelabs.com/buildstatus/jsfehler

Stere is a library for writing Page Objects, designed to work on top of your existing automation library.

Design Philosophy

Many implementations of the Page Object model focus on removing the duplication of element locators. Stere goes one step further, offering a complete wrapper over the code that drives automation.

The goals of this project are to:

1 - Eliminate implementation code in test functions. Tests should read like a set of user actions.

2 - Reduce the need for hand-written helper methods in Page Objects.

3 - Provide a simple pattern for writing maintainable Page Objects.

No automation abilities are built directly into the project; it completely relies on being hooked into other libraries. However, a default implementation using Splinter is available out of the box.

Basic Usage

Fundementally, a Page Object is just a Python class.

A minimal Stere Page Object should:

1 - Subclass the Page class

2 - Declare Fields and Areas in the __init__ method

As an example, here’s the home page for Wikipedia:

from stere import Page
from stere.areas import Area, RepeatingArea
from stere.fields import Button, Input, Link, Text

class WikipediaHome(Page):
    def __init__(self):
        self.search_form = Area(
            query=Input('id', 'searchInput'),
            submit=Button('xpath', '//*[@id="search-form"]/fieldset/button')
        )

        self.other_projects = RepeatingArea(
            root=Root('xpath', '//*[@class="other-project"]'),
            title=Link('xpath', '//*[@class="other-project-title"]'),
            tagline=Text('xpath', '//*[@class="other-project-tagline"]')
        )

The search form is represented as an Area with two Fields inside it.

A Field represents a single item, while an Area represents a unique collection of Fields.

The query and submit Fields didn’t have to be placed inside an Area. However, doing so allows you to use Area’s perform() method.

The links to other products are represented as a RepeatingArea . A RepeatingArea represents a non-unique collection of Fields on the page. Using the root argument, RepeatingArea will find all instances of said root, then build the appropriate number of Areas with all the other Fields inside.

It’s just as valid to declare each of the other products as a separate Area one at a time, like so:

self.commons = Area(
    root=Root('xpath', '//*[@class="other-project"][1]'),
    title=Link('xpath', '//*[@class="other-project-title"]'),
    tagline=Text('xpath', '//*[@class="other-project-tagline"]')
)

self.wikivoyage = Area(
    root=Root('xpath', '//*[@class="other-project"][2]'),
    title=Link('xpath', '//*[@class="other-project-title"]'),
    tagline=Text('xpath', '//*[@class="other-project-tagline"]')
)

Which style you pick depends entirely on how you want to model the page. RepeatingArea does the most good with collections where the number of areas and/or the contents of the areas can’t be predicted, such as inventory lists.

Using a Page Object in a test can be done like so:

def test_search_wikipedia():
    WikipediaHome().search_form.perform('kittens')

Documentation

https://stere.readthedocs.io/en/latest/

License

Distributed under the terms of the MIT license, “Stere” is free and open source software

Issues

If you encounter any problems, please file an issue along with a detailed description.

Thanks

Cross-browser Testing Platform and Open Source <3 Provided by Sauce Labs

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

stere-0.2.1.tar.gz (12.3 kB view details)

Uploaded Source

Built Distribution

stere-0.2.1-py3-none-any.whl (18.5 kB view details)

Uploaded Python 3

File details

Details for the file stere-0.2.1.tar.gz.

File metadata

  • Download URL: stere-0.2.1.tar.gz
  • Upload date:
  • Size: 12.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.1

File hashes

Hashes for stere-0.2.1.tar.gz
Algorithm Hash digest
SHA256 eeb681ac486c169b8c0a752da9d5d70e67ca505fbceb3633bdc271f42bf78c3f
MD5 f7834d4e9de8e9563c7177d2afca1a45
BLAKE2b-256 6088e49854fba9d66480c7bb9f86df6569a1cf619f69dde49fe3d540e132be61

See more details on using hashes here.

Provenance

File details

Details for the file stere-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: stere-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 18.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.1

File hashes

Hashes for stere-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cdfb339cdf4d2a9eefbf85daaf8bdb7f223a057d5b69bb84130b9d6d6e55c311
MD5 941a279c26398c66be468907d9a5068a
BLAKE2b-256 ceebc1bbfc11ee29d1a7e1424bf762c8bcb5257bf0ee36e2504ab2abe075494d

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page