mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-30 11:52:17 +00:00
Some deduplication for testing code
This commit is contained in:
@@ -2,7 +2,7 @@ from pypom import Page, Region
|
|||||||
from selenium.webdriver.common.by import By
|
from selenium.webdriver.common.by import By
|
||||||
from selenium.webdriver import Chrome
|
from selenium.webdriver import Chrome
|
||||||
from selenium.common.exceptions import NoSuchElementException
|
from selenium.common.exceptions import NoSuchElementException
|
||||||
|
from PyRIGS.tests import regions
|
||||||
|
|
||||||
class BasePage(Page):
|
class BasePage(Page):
|
||||||
form_items = {}
|
form_items = {}
|
||||||
@@ -34,37 +34,19 @@ class FormPage(BasePage):
|
|||||||
self.driver.execute_script("Array.from(document.getElementsByTagName(\"input\")).forEach(function (el, ind, arr) { el.removeAttribute(\"required\")});")
|
self.driver.execute_script("Array.from(document.getElementsByTagName(\"input\")).forEach(function (el, ind, arr) { el.removeAttribute(\"required\")});")
|
||||||
self.driver.execute_script("Array.from(document.getElementsByTagName(\"select\")).forEach(function (el, ind, arr) { el.removeAttribute(\"required\")});")
|
self.driver.execute_script("Array.from(document.getElementsByTagName(\"select\")).forEach(function (el, ind, arr) { el.removeAttribute(\"required\")});")
|
||||||
|
|
||||||
|
def submit(self):
|
||||||
|
previous_errors = self.errors
|
||||||
|
self.find_element(*self._submit_locator).click()
|
||||||
|
self.wait.until(lambda x: self.errors != previous_errors or self.success)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def errors(self):
|
def errors(self):
|
||||||
try:
|
try:
|
||||||
error_page = self.ErrorPage(self, self.find_element(*self._errors_selector))
|
error_page = regions.ErrorPage(self, self.find_element(*self._errors_selector))
|
||||||
return error_page.errors
|
return error_page.errors
|
||||||
except NoSuchElementException:
|
except NoSuchElementException:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
class ErrorPage(Region):
|
|
||||||
_error_item_selector = (By.CSS_SELECTOR, "dl>span")
|
|
||||||
|
|
||||||
class ErrorItem(Region):
|
|
||||||
_field_selector = (By.CSS_SELECTOR, "dt")
|
|
||||||
_error_selector = (By.CSS_SELECTOR, "dd>ul>li")
|
|
||||||
|
|
||||||
@property
|
|
||||||
def field_name(self):
|
|
||||||
return self.find_element(*self._field_selector).text
|
|
||||||
|
|
||||||
@property
|
|
||||||
def errors(self):
|
|
||||||
return [x.text for x in self.find_elements(*self._error_selector)]
|
|
||||||
|
|
||||||
@property
|
|
||||||
def errors(self):
|
|
||||||
error_items = [self.ErrorItem(self, x) for x in self.find_elements(*self._error_item_selector)]
|
|
||||||
errors = {}
|
|
||||||
for error in error_items:
|
|
||||||
errors[error.field_name] = error.errors
|
|
||||||
return errors
|
|
||||||
|
|
||||||
|
|
||||||
class LoginPage(BasePage):
|
class LoginPage(BasePage):
|
||||||
URL_TEMPLATE = '/user/login'
|
URL_TEMPLATE = '/user/login'
|
||||||
|
|||||||
@@ -131,3 +131,27 @@ class SingleSelectPicker(Region):
|
|||||||
def set_value(self, value):
|
def set_value(self, value):
|
||||||
picker = Select(self.root)
|
picker = Select(self.root)
|
||||||
picker.select_by_visible_text(value)
|
picker.select_by_visible_text(value)
|
||||||
|
|
||||||
|
|
||||||
|
class ErrorPage(Region):
|
||||||
|
_error_item_selector = (By.CSS_SELECTOR, "dl>span")
|
||||||
|
|
||||||
|
class ErrorItem(Region):
|
||||||
|
_field_selector = (By.CSS_SELECTOR, "dt")
|
||||||
|
_error_selector = (By.CSS_SELECTOR, "dd>ul>li")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def field_name(self):
|
||||||
|
return self.find_element(*self._field_selector).text
|
||||||
|
|
||||||
|
@property
|
||||||
|
def errors(self):
|
||||||
|
return [x.text for x in self.find_elements(*self._error_selector)]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def errors(self):
|
||||||
|
error_items = [self.ErrorItem(self, x) for x in self.find_elements(*self._error_item_selector)]
|
||||||
|
errors = {}
|
||||||
|
for error in error_items:
|
||||||
|
errors[error.field_name] = error.errors
|
||||||
|
return errors
|
||||||
|
|||||||
@@ -98,11 +98,6 @@ class AssetForm(FormPage):
|
|||||||
def parent_selector(self):
|
def parent_selector(self):
|
||||||
return regions.BootstrapSelectElement(self, self.find_element(*self._parent_select_locator))
|
return regions.BootstrapSelectElement(self, self.find_element(*self._parent_select_locator))
|
||||||
|
|
||||||
def submit(self):
|
|
||||||
previous_errors = self.errors
|
|
||||||
self.find_element(*self._submit_locator).click()
|
|
||||||
self.wait.until(lambda x: self.errors != previous_errors or self.success)
|
|
||||||
|
|
||||||
|
|
||||||
class AssetEdit(AssetForm):
|
class AssetEdit(AssetForm):
|
||||||
URL_TEMPLATE = '/assets/asset/id/{asset_id}/edit/'
|
URL_TEMPLATE = '/assets/asset/id/{asset_id}/edit/'
|
||||||
@@ -165,11 +160,6 @@ class SupplierForm(FormPage):
|
|||||||
'name': (regions.TextBox, (By.ID, 'id_name')),
|
'name': (regions.TextBox, (By.ID, 'id_name')),
|
||||||
}
|
}
|
||||||
|
|
||||||
def submit(self):
|
|
||||||
previous_errors = self.errors
|
|
||||||
self.find_element(*self._submit_locator).click()
|
|
||||||
self.wait.until(lambda x: self.errors != previous_errors or self.success)
|
|
||||||
|
|
||||||
|
|
||||||
class SupplierCreate(SupplierForm):
|
class SupplierCreate(SupplierForm):
|
||||||
URL_TEMPLATE = reverse('supplier_create')
|
URL_TEMPLATE = reverse('supplier_create')
|
||||||
@@ -240,7 +230,7 @@ class AssetAuditList(AssetList):
|
|||||||
@property
|
@property
|
||||||
def errors(self):
|
def errors(self):
|
||||||
try:
|
try:
|
||||||
error_page = self.ErrorPage(self, self.find_element(*self._errors_selector))
|
error_page = regions.ErrorPage(self, self.find_element(*self._errors_selector))
|
||||||
return error_page.errors
|
return error_page.errors
|
||||||
except NoSuchElementException:
|
except NoSuchElementException:
|
||||||
return None
|
return None
|
||||||
@@ -248,30 +238,7 @@ class AssetAuditList(AssetList):
|
|||||||
def submit(self):
|
def submit(self):
|
||||||
previous_errors = self.errors
|
previous_errors = self.errors
|
||||||
self.root.find_element(*self._submit_locator).click()
|
self.root.find_element(*self._submit_locator).click()
|
||||||
# self.wait.until(lambda x: not self.is_displayed)
|
# self.wait.until(lambda x: not self.is_displayed) TODO
|
||||||
|
|
||||||
class ErrorPage(Region):
|
|
||||||
_error_item_selector = (By.CSS_SELECTOR, "dl>span")
|
|
||||||
|
|
||||||
class ErrorItem(Region):
|
|
||||||
_field_selector = (By.CSS_SELECTOR, "dt")
|
|
||||||
_error_selector = (By.CSS_SELECTOR, "dd>ul>li")
|
|
||||||
|
|
||||||
@property
|
|
||||||
def field_name(self):
|
|
||||||
return self.find_element(*self._field_selector).text
|
|
||||||
|
|
||||||
@property
|
|
||||||
def errors(self):
|
|
||||||
return [x.text for x in self.find_elements(*self._error_selector)]
|
|
||||||
|
|
||||||
@property
|
|
||||||
def errors(self):
|
|
||||||
error_items = [self.ErrorItem(self, x) for x in self.find_elements(*self._error_item_selector)]
|
|
||||||
errors = {}
|
|
||||||
for error in error_items:
|
|
||||||
errors[error.field_name] = error.errors
|
|
||||||
return errors
|
|
||||||
|
|
||||||
def remove_all_required(self):
|
def remove_all_required(self):
|
||||||
self.driver.execute_script("Array.from(document.getElementsByTagName(\"input\")).forEach(function (el, ind, arr) { el.removeAttribute(\"required\")});")
|
self.driver.execute_script("Array.from(document.getElementsByTagName(\"input\")).forEach(function (el, ind, arr) { el.removeAttribute(\"required\")});")
|
||||||
|
|||||||
Reference in New Issue
Block a user