(python) Использование @parameterized lib с объявлением драйвера? - PullRequest
0 голосов
/ 26 ноября 2018

Я пишу параметризованные 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?:)

1 Ответ

0 голосов
/ 03 декабря 2018

Итак, после пары дней отладки мы поняли, что когда у меня есть пара приборов перед тестовым классом, затем пара приборов в самом классе, некоторые из них возвращают мне «драйвер», затем яиметь этот код:

@parameterized.expand([
        ("short password", 'username', 'password', 'password', 'email@email.com', '',
         pass_len_errs),
...)
  • параметризованный, вероятно, думает, что первый аргумент (это «короткий пароль» - название теста) - это сам драйвер.Так что это, вероятно, конфликт аргументов.
...