Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

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

page-object
webdriver
python
Теги: #<Tag:0x00007fedb75109f8> #<Tag:0x00007fedb7510890> #<Tag:0x00007fedb75106d8>

(Philip Kandyba) #1

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

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 подчеркивается и пишет что он вне конструктора?


(Philip Kandyba) #3

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

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


(Bolatbek) #4

Запарился, в 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()

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

(Philip Kandyba) #6

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


(Sergei Chipiga) #7

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


(Roy Obenon) #8

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