Хочу создать основу для сайта, который будет тестироваться. Использую Page objext pattern.
Есть основная фикстура, в которой создается класс для работы с webdriver.
Я хочу создать базовый класс Page от которого наследовать остальные страницы. В каждом page объекте должна быть возможность работать с webdriver'om, для этого в конструктор нужно передавать фикстуру-браузер. Соответственно при создании наследников им также нужно передавать эту фикстуру в конструктор.
Это нормально или нет? Меня немного напрягает то, что фикстуру надо в каждую тестовую функцию передавать, а затем и в классы страниц при создании объекта.
Файл conftest, главная фикстура
import pytest
from app.browser import App
@pytest.fixture(scope="session")
def app(request):
# TODO add authorization check
app = App()
request.addfinalizer(app.destroy)
return app
Класс фикстуры
from selenium import webdriver
from config import *
class App:
def __init__(self):
if browser == "firefox":
self.wd = webdriver.Firefox()
elif browser == "chrome":
self.wd = webdriver.Chrome()
elif browser == "ie":
self.wd = webdriver.Ie()
self.wd.implicitly_wait(5)
def destroy(self):
self.wd.quit()
базовый класс Page. app - это фикстура - браузер
class Page():
def __init__(self, app):
self.wd = app.wd
пример теста:
from pages.index import Index
def test_open_page(app):
app.wd.get('https://www.restaurantsupply.com')
index = Index(app)
assert 'Restaurant Supplies' in index.wd.title