Я пишу параметризованные UI-тесты для создания нового пользователя.Раньше я делал это с @pytest.mark.parametrize()
, но теперь я решил попробовать @ параметризованный .Как выглядит мой код:
class TestUsers:
@pytest.mark.usefixtures("open_users_page")
@pytest.mark.usefixtures("login")
@parameterized.expand([
('username', 'password', 'password_confirm', 'email'), # test id
... и другие параметры.После этого:
@pytest.mark.usefixtures("fill_create_user_form") # where i fill non-parameterized fields
def test_user(self, driver, name, password, password_confirm, email):
users_page = UsersPage(driver) # where driver is a geckodriver
users_page.set_name(name)
users_page.set_password(password)
users_page.set_password_conf(passwordConf)
users_page.set_email(email)
users_page.click_create_new_user_button()
После выполнения этого я получаю ошибку: TypeError: test_user() missing 1 required positional argument: 'email'
, и мы пытались переписать это так:
def test_user(self, *args, **kwargs)
print(args, kwargs)
users_page = UsersPage(driver)
- тесты напечатали аргументы и перешли кследующий шаг перед переходом к следующему шагу и использованием драйвера.Я должен отметить, что этот тест сработал:
def test_empty_fields(self, driver):
"""Try to create a new user with empty input fields - an errors should appear"""
users_page = UsersPage(driver)
users_page.click_add_user_button()
users_page.click_create_new_user_button()
errors = users_page.find_item_errors_on_page()
errors_count = len(errors)
assert errors_count == 9
Итак, вопрос: как я могу использовать self
и driver
в этой ситуации?Или я должен просто забыть о тестовом классе и @parameterized и использовать старый @pytest.mark.parametrize
?:)