t.me/atinfo_chat Telegram группа по автоматизации тестирования

Page Object - конструктор базового класса

Теги: #<Tag:0x00007f9b03be9c18> #<Tag:0x00007f9b03be99c0> #<Tag:0x00007f9b03be97b8>

Базовый класс

class Page(object):

    def __init__(self, driver):
        self.driver = driver

Класс с тестом

class TestLogin:

    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.get('/login')

Почему self.driver подчеркивается и пишет что он вне конструктора?

Если сделать так то не работает

Ошибка -
self.inst = self.cls() TypeError: __init__() missing 1 required positional argument: 'driver'

Запарился, в PYTEST помнится так было.

Класс с тестом

class TestLogin():

    @classmethod
    def setup_class(cls):
        pass

    def setup_method(self, method):
        self.driver = webdriver.Chrome()
        self.driver.get('/login')

    def teardown_method(self, method):
        self.driver.quit()
  1. Странно, что классы написаны в разном стиле: с наследованием от object и без.
  2. Вообще логично, что подчеркивает, т.к. в TestLogin driver создается не при инициализации инстанса, а это плохая практика. (Хотя обычно в тестах вроде не делают __init__, кажется pytest так вообще рейзит экспепшен, если находит такой метод у класса с тестами)

Подскажите как реализовать лучше, или дайте ссылку на пример. Спасибо.

Как это пофиксить - я не могу подсказать. Можно забить на это сообщение. Но лучше сразу переходить на pytest и его фикстуры, setup/teardown - не дадут вам той гибкости, которые дают фикстуры.

http://pytest-selenium.readthedocs.io/en/latest/user_guide.html