Добрый день!
Изначально я не корректно создал фикстуру. Теперь она мешает мне корректно передавать драйвер в экземпляры классов.
По порядку.
conftest.py
@pytest.yield_fixture(params=browsers.keys())
def driver(request):
browser = browsers[request.param]()
# Тут я создаю ексзепляр класса и передаю ему драйвер.
login_page = LoginPage(browser)
login_page.open_page('https://client.triggmine.com.ua/login')
yield login_page
browser.quit()
LoginPage.py наследуется от базового класса Page. Здесь функции по работе со страницей логин.
class LoginPage(Page):
def is_notification_from_email_field(self):
return self.is_displayed(LoginPageLocators.NOTIFICATION_EMPTY_EMAIL_FIELD)
def is_notification_from_password_field(self):
return self.is_displayed(LoginPageLocators.NOTIFICATION_EMPTY_PASSWORD_FIELD)
Base.py - это базовый клас с инициализацей и методами для работы с элементами.
class Page:
def __init__(self, driver):
self.driver = driver
driver.maximize_window()
def find_element(self, locator):
return self.driver.find_element(locator[0], locator[1])
test_suite.py - сам файл с тестом который принимает фикстуру driver из conftest.py
def test_empty_fields(driver):
driver.click_login_button()
assert driver.is_notification_from_email_field()
assert driver.is_notification_from_password_field()
Проблема собственно в том что я уже в самой фикстуре создаю экземпляр класса Login page и передаю ей драйвер. Это в корне не верно. Так как это приводит к тому что я не могу делать экземпляры других класов с методами для работы со страницами. Есть же еще и другие классы, например SignupPage но я не создавать экземпляры класса и предать в них драйвер.
Например тест на логин:
def test_login_in(driver):
driver.login_in('login', '123456')
assert driver.is_h2_title()
Где метод login_In в классе логин, а is_h2_title метод класса SignupPage.
Как правильно реализовать фикстуру что бы не было таких проблем. Спасибо.