Продолжение предыдущего вопроса
Итак, расширено conftest.py
с добавленной параметризацией теста:
import pytest
import os
from selenium import webdriver
from pages.signin_page import SigninPage
@pytest.fixture(scope='function', autouse=True)
def driver_provider(request):
request.cls.driver = webdriver.Chrome(executable_path=os.path.join("web_drivers", "chromedriver.exe"))
request.cls.signin = SigninPage(request.cls.driver)
def fin():
request.cls.driver.quit()
request.addfinalizer(fin)
def pytest_generate_tests(metafunc):
metafunc.parametrize("link, workspace", (
("https://slack.com/signin", "test"),))
и signin_page
с простым методом, гдепредоставляется значение рабочей области:
from pages.login_page import LogInPage
class SigninPage(object):
def __init__(self, web_driver):
# Initialize web driver
self.driver = web_driver
self.driver.get("https://slack.com/signin") #<-- provide here link from parametrization instead
self.input_field = self.driver.find_element_by_xpath("//input[@type='text' and @id='domain']")
self.continue_button = self.driver.find_element_by_xpath("//button[@id='submit_team_domain']")
def enter_workspace(self, workspace):
self.input_field.send_keys(workspace)
return self
def click_on_continue_button(self):
self.continue_button.click()
return LogInPage(self.driver)
Вопрос в том, как я могу предоставить link
значение из metafunc.parametrize
как self.driver.get
значение в классе SigninPage
, аналогичное workspace
, предоставленному для метода?
1) Во время инициализации request.cls.signin = SigninPage(request.cls.driver)
?Он не работает так же просто, как в случае рабочей области (добавьте link
в список аргументов) - есть ли другой способ?
2) Создайте отдельный прибор, который будет возвращать значение ссылки, а затем используйте его с @pytest.mark.usefixtures
, для SigninPage
(?) Или это __init__
метод (?) Но можно ли его использовать вместе с приспособлением driver_provider
для одного метода класса?
Но также, link
и workspace
должен оставаться в генерации тестов, так как фактически должен быть прочитан из файла (эта часть упрощена для примера, чтение из файла работает нормально)