Я не знаю как вынести в отдельный класс отельной страницы тут вечные споры, где они должны храниться. Лично я храню локаторы просто в папке под названием locators там лежит файлик ProjectPageElements.py
class ProjectPageElements():---->Просто класс локаторы!!!
tooltip_close_button = (By.XPATH, '//msg-module/div/p-growl/div/div/div/div[1]')
button_create_test = (By.XPATH,'//span[contains(text(),"Создать")]')
project_page_title = (By.XPATH, '//h5')
button_menu = (By.XPATH, '//span[contains(text(),"Меню")]')
Потом есть папка pages там лежит такое ProjectPlanPage.py
from project_name.locators.ProjectPageElements import ProjectPageElements
class ProjectPlanPage(Page):--->>(В проекте 5 больших закладок поэтому я выделил каждую в класс)
def __init__(self, driver):
super(ProjectPlanPage, self).__init__(driver)
self.new_test_form = NewRevisionForm(self.driver)-->строка создание нового объекта форма(у менять закладка -Это объект(ProjectPlanPage), а закладке открывается форма и это тоже объект NewCreateForm)
def open_new_test_form(self):
self.click_element(ProjectPageElements.button_menu)
self.click_button(ProjectPageElements.button_create_test)
Еще я выделил формы как отдельный объект в папке forms лежит
class NewCreateForm(BaseForm):----> В закладке открывается форма создал класс
def __init__(self, driver):
super(NewCreateForm, self).__init__(driver)
def close_form(self):
self.click_button(NewCreateFormElements.button_cancel)
А в Page лежит что-то такое:
class Page(object):---->>>
def __init__(self, driver):
self.driver = driver
def click_button(self, locator):
try:
WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located(locator)
).click()
angular_not_active()(self.driver)
except TimeoutException:
raise Exception(u"Время появления кнопки истекло")
def click_element(self, locator):
try:
WebDriverWait(self.driver, 10).until(
EC.element_to_be_clickable(locator)
).click()
angular_not_active()(self.driver)
except TimeoutException:
raise Exception(u"Время появления кнопки истекло")
У меня так. ак правильно я точно пока не знаю))
Тест выглядит так :
class TestCreate():
def setup_class(self):
self.project_page = ProjectPlanPage(self.driver)
def test_open_new_test_form(self):
with pytest.allure.step('Проверка открытия формы "Новая проверка" ')
self.project_page.open_new_test_form()
assert u'Новая проверка' == self.project_page.new_test_form.check_form_title()