Добрый день,
Создаю тестовый фреймворк на основе appium и pytest.
Фреймворк разбил на части:
- PO
- Локаторы
- Тесты
- Хелперы
conftest.py
@pytest.fixture(scope='function', autouse=True)
def driver(request):
def init_driver():
logging.info("Creating a webdriver instance")
return webdriver.Remote(ConfigVars.appium_host, ConfigVars.desired_caps)
driver = init_driver()
logging.info(driver.session_id)
driver.implicitly_wait(5000)
login(config.user_name, config.pass)
def fin():
logging.info("Closing webdriver instance")
driver.quit()
yield driver
request.addfinalizer(fin)
def login(name, password):
pass
base_page.py
class BaseMobilePage:
def check_page_title(self, id):
return self.driver.find_element_by_accessibility_id(id).text
account_page.py
from pages.base_mobile_page import BaseMobilePage
class AccountPage(BaseMobilePage):
_MESSAGE = f"Welcome {user_name}"
test_1.py
from pages.mobile_pages.account_page import AccountPage
class TestAccountPage(AccountPage):
def test_1(self, driver):
txt = self.check_page_title("welcom_msg")
assert txt == self._MESSAGE
Порядок действий видится следующим:
- инициализация драйвера
- логин в приложение
- тест
- закрытие драйвера
И так для всех N тестов
Проблема в том, что при таком подходе переменную driver надо явно передавать, а есть ли какая-нибудь возможность прокинуть инстанс драйвера в родительский класс, скажем в
BaseMobilePage в self.driver?
Возможно предложите какие-нибудь улучшения по архитектуре\логике?
Спасибо!