Skip to main content

It will download a WebDriver, and then set basic configuration automatically.

Project description

PWDriver (PyWebDriver)

E2e test Code Coverage

Release status PyPI version

MIT License FOSSA Status

Motivation

To simplify automation settings of each different platform, version, browser.

Support:
  • ChromeDriver

  • GeckoDriver

  • EdgeDriver (Chromium)

  • IEDriver

  • ...and Android, iOS (See With Appium section)

Usage

1. Install:

pip install pwdriver

2. Make 'config.ini' file and locate in your project directory.

config.ini look like this.

[automation]
;if using remote webdriver, then local be false and url required.
local=true
url=http://localhost:4444
;target: chrome, gecko, edge, safari
target=chrome

3. Import WebDriverFactory.

Now, we can launch webdriver.

from pwdriver.core import WebDriverFactory

driver = WebDriverFactory.launch()

Alternative Usage

This way doesn't make and doesn't use configuration file, but calls setup method of the driver in your test code.

with Chrome:

from selenium import webdriver
from pwdriver import core

core.setup_chromedriver()
driver = webdriver.Chrome()

with FireFox:

from selenium import webdriver
from pwdriver import core

core.setup_geckodriver()
driver = webdriver.Firefox()

with Edge:

from selenium import webdriver
from pwdriver import core

core.setup_edgedriver()
driver = webdriver.Edge()

Page object models

Page object models pattern makes our test cases more concise and readable.

The good news is, we can use Page Objects with this.

There is an example that searching for keyword on www.bing.com and verifying url, title.

For using this, we are going to create modules that page object classes and test cases.

Modules that page elements and locators already implemented, so nevermind.

Page Object Class

from selenium.webdriver.common.by import By

from pwdriver.page import BasePage


class BingPage(BasePage):
    def __init__(self, driver):
        super().__init__(driver)
        self._url = 'https://www.bing.com'
        self._locator = {
            'input': (By.CSS_SELECTOR, 'input#sb_form_q'),
            'search': (By.CSS_SELECTOR, 'label#search_icon')
        }

    def type_keyword(self, text) -> None:
        self._by('input').send_keys(text)

    def click_search(self) -> BasePage:
        self._by('search').click()
        return BingPage(BasePage)

Test case

from pwdriver.core import WebDriverFactory
from tests.pages.bing_page import BingPage

import unittest


class BrowserTest(unittest.TestCase):
    def setUp(self):
        self.driver = WebDriverFactory.launch()

    def tearDown(self):
        self.driver.quit()

    def test_something(self):
        page = BingPage(self.driver)
        page.get()
        keyword = 'chicken'
        page.type_keyword(keyword)
        page.submit_keyword()
        self.assertIn(f'https://www.bing.com/search?q={keyword}', self.driver.current_url)
        self.assertEqual(f'{keyword} - Search', self.driver.title)


if __name__ == '__main__':
    unittest.main()

Logging and Event listener

If we want to use logging or want to see what events occured in webdriver,

we can use get_logger() or EventListener().

See below example code.

Test

from selenium.webdriver.support.events import EventFiringWebDriver

from pwdriver.core import WebDriverFactory
from pwdriver.listener import EventListener
from pwdriver.util import get_logger

logger = get_logger('test')

core = WebDriverFactory.launch()
driver = EventFiringWebDriver(core, EventListener())
logger.info('WebDriver created.')
  • Log level: debug, info, warning, error, critical
  • WebDriver event: navigate, execute script
  • WebElement event: find, click, change value

With Appium

This package also includes wrapped appium's remote webdriver.

We could launch an appium driver using config.ini file that contains capabilities.

See below configuration and example code.

Configuration

[automation]
;if using appium, then local be false and url required.
local=false
url=http://localhost:4723
;target: android, ios
target=ios

[mobile]
;add capabilities for mobile testing.
platformVersion=15.5
deviceName=iPhone 13 mini
browserName=Safari

Test

from pwdriver.core import WebDriverFactory

driver = WebDriverFactory.launch()

License

FOSSA Status

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

pwdriver-0.27.3.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

pwdriver-0.27.3-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

File details

Details for the file pwdriver-0.27.3.tar.gz.

File metadata

  • Download URL: pwdriver-0.27.3.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.0 Linux/5.15.0-1041-azure

File hashes

Hashes for pwdriver-0.27.3.tar.gz
Algorithm Hash digest
SHA256 619b19d76924ddd2c65d19676212a72fbea0ab4bab7b4f8ceda6c7302f96c5c4
MD5 14b6484b43c61ef0eb8183eba2a44b17
BLAKE2b-256 3b1ec281ce44eee0ded0d54a480e8b2466827c84b21601cf27c65ba2e7d3371a

See more details on using hashes here.

File details

Details for the file pwdriver-0.27.3-py3-none-any.whl.

File metadata

  • Download URL: pwdriver-0.27.3-py3-none-any.whl
  • Upload date:
  • Size: 9.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.0 Linux/5.15.0-1041-azure

File hashes

Hashes for pwdriver-0.27.3-py3-none-any.whl
Algorithm Hash digest
SHA256 ff6a338bed430b26c174b131587c4083e8f85e92497e9a53b92632ab302efd22
MD5 b7b3eecde6a0c39d7df84c37583becc2
BLAKE2b-256 a21a7fe2c8ba2a61172cc05c625d64fadeabd346ff9d326dd63b6ed78bc493a9

See more details on using hashes here.

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