Some deduplication for testing code

This commit is contained in:
2020-02-23 23:39:11 +00:00
parent da0c9ba87b
commit db7440e9da
3 changed files with 33 additions and 60 deletions

View File

@@ -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'

View File

@@ -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

View File

@@ -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\")});")