Skip to main content

Base implementation of Page Object Model

Project description

Pomcorn

GitHub Workflow Status (with event) PyPI PyPI - Status PyPI - Python Version PyPI - License PyPI - Downloads Ruff

Pomcorn, or Page Object Model corn, is a Python package that contains base classes to create systems based on Selenium framework and Page Object Model pattern. You can read more about this pattern here. The package can be used to create autotesting systems, parsing scripts and anything that requires interaction with the browser.

The package includes next base classes to create Page Object Model (POM) pages:

  classDiagram
    WebView <|-- Component
    WebView <|-- Page
    Component <|-- ListComponent
    Component .. Locator
    Page .. Component

    class WebView{
        -webdriver: Webdriver
    }
    class Page{
        +wait_until_loaded()
        +open()
    }
    class Component{
        -page: Page
        -base_locator: Locator
        + wait_until_visible()
    }
    class ListComponent{
        -item_locator: Locator
        +count()
        +all()
        +get_item_by_text()
    }
    class Locator{
      -query: String
    }

It also includes classes to locate elements on the web page and a number of additional waiting conditions.

Installation

You can install it by pip:

  pip install pomcorn

Or poetry:

  poetry add pomcorn

Documentation

Link to the documentation: http://pomcorn.rtfd.io/.

Usage

You need to install pomcorn and Chrome webdriver.

Below is the code that opens PyPI.org, searches for packages by name and prints names of found packages to the terminal. The script contains all base classes contained in pomcorn: Page, Component, ListComponent and Element.

  from typing import Self

  from selenium.webdriver import Chrome
  from selenium.webdriver.common.keys import Keys
  from selenium.webdriver.remote.webdriver import WebDriver

  from pomcorn import Component, Element, ListComponent, Page, locators


  # Prepare base page
  class PyPIPage(Page):

      APP_ROOT = "https://pypi.org"

      search = Element(locators.IdLocator("search"))

      def check_page_is_loaded(self) -> bool:
          return self.init_element(locators.TagNameLocator("main")).is_displayed


  # Prepare components
  Package = Component[PyPIPage]


  class PackageList(ListComponent[Package, PyPIPage]):

      relative_item_locator = locators.ClassLocator("snippet__name")

      @property
      def names(self) -> list[str]:
          return [package.body.get_text() for package in self.all]


  # Prepare search page
  class SearchPage(PyPIPage):

      @classmethod
      def open(cls, webdriver: WebDriver, **kwargs) -> Self:
          pypi_page = super().open(webdriver, **kwargs)
          # Specific logic for PyPI for an open search page
          pypi_page.search.fill("")
          pypi_page.search.send_keys(Keys.ENTER)
          return cls(webdriver, **kwargs)

      @property
      def results(self) -> PackageList:
          return PackageList(
              page=self,
              base_locator=locators.PropertyLocator(
                  prop="aria-label",
                  value="Search results",
              ),
          )

      def find(self, query: str) -> PackageList:
          self.search.fill(query)
          self.search.send_keys(Keys.ENTER)
          return self.results


  search_page = SearchPage.open(webdriver=Chrome())
  print(search_page.find("saritasa").names)
  search_page.webdriver.close()

For more information about package classes, you can read in Object Hierarchy and Developer Interface.

Also you can try our demo autotests project.

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

pomcorn-0.10.2.tar.gz (21.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pomcorn-0.10.2-py3-none-any.whl (23.3 kB view details)

Uploaded Python 3

File details

Details for the file pomcorn-0.10.2.tar.gz.

File metadata

  • Download URL: pomcorn-0.10.2.tar.gz
  • Upload date:
  • Size: 21.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pomcorn-0.10.2.tar.gz
Algorithm Hash digest
SHA256 5b6fd4887d4ab192cb3d42036849c1159311c420784652b006107ebf9911d87a
MD5 c364c4b0849e1cdc792baeb49230ee1b
BLAKE2b-256 0ed4b8da3bd2c6a84fa47585706afb629be4ff152adec692b05edf0485729317

See more details on using hashes here.

Provenance

The following attestation bundles were made for pomcorn-0.10.2.tar.gz:

Publisher: publish.yml on saritasa-nest/pomcorn

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pomcorn-0.10.2-py3-none-any.whl.

File metadata

  • Download URL: pomcorn-0.10.2-py3-none-any.whl
  • Upload date:
  • Size: 23.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pomcorn-0.10.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d17d2679f037f2d3578dff1a2fe06a83b1101ac03acf6a7e49d137b44ea4cce4
MD5 30493edde11efef0cb787e30cae3b53b
BLAKE2b-256 8d4f20fb59acf60e9f9d1ebce3f1fbf1de08a15e128c89f62c5b74b5048ffa8c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pomcorn-0.10.2-py3-none-any.whl:

Publisher: publish.yml on saritasa-nest/pomcorn

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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