UI Test Framework
Package for Testing Browser User interfaces.
Installation
pip install uitestframework
You must also download the driver for your selected browser and place it in your working directory Drivers can be
downloaded here.
Usage
The UI Test Framework provides a base for creating browser based UI tests by using the Page Object Model and selenium
webdriver. You might find
it most useful for testing web application in development in which the UI is continually being changed. Typical usage
often looks like this:
from unittest import TestCase
from uitestframework import UITestCaseMixin, PageObjectModel
from uitestframework.pom import BasePage, BaseElement
APPLICATION_HOST = "https://localhost:8080"
class MyPage(BasePage):
def set_elements(self):
button1 = BaseElement(name="Button1", locator="button_id", locator_type='id', page=self)
return [button1]
class MyPOM(PageObjectModel):
url_map = {
'': MyPage,
}
class MyTestCase(UITestCaseMixin, TestCase):
driver_path = "chromedriver.exe"
browser = 'chrome'
pom = MyPOM()
def test_foo(self):
self.driver.get(APPLICATION_HOST)
self.pom.button1.click()
self.assertTrue(self.driver.current_url != APPLICATION_HOST)
To test pages which require user input. The FormPage class can be used. An example of usage is provided below::
from unittest import TestCase
from selenium.webdriver.common.by import By
from uitestframework import UITestCaseMixin, PageObjectModel
from uitestframework.pom import FormPage, FieldElement, BaseElement
APPLICATION_HOST = "https://localhost:8080"
class LoginPage(FormPage):
def set_elements(self):
username = FieldElement(name='username', locator="id_username", locator_type=By.ID, page=self)
password = FieldElement(name='password', locator="id_password", locator_type=By.ID, page=self)
submit = FieldElement(name='submit', locator="id_submit", locator_type=By.ID, page=self)
error_message = BaseElement(name='error_message', locator="id_error", locator_type=By.ID, page=self)
return [username, password, submit, error_message]
class MyApplicationPOM(PageObjectModel):
url_map = {
'/login': LoginPage,
}
class MyTestCase(UITestCaseMixin, TestCase):
driver_path = "chromedriver.exe"
browser = 'chrome'
pom = MyApplicationPOM()
def test_login(self):
login_url = APPLICATION_HOST + '/login'
self.driver.get(login_url)
self.pom.autofill(username='username', password='correct password')
self.pom.submit.click()
self.assertTrue(self.driver.current_url != login_url)
def test_failed_login(self):
login_url = APPLICATION_HOST + '/login'
self.driver.get(login_url)
self.pom.autofill(username='username', password='wrong password')
self.pom.submit.click()
self.assertTrue(self.pom.error_message.is_rendered())