pytest: pytest_generate_tests результат в качестве значения для возвращенного тестового класса из другого прибора - PullRequest
0 голосов
/ 16 декабря 2018

Продолжение предыдущего вопроса

Итак, расширено 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 должен оставаться в генерации тестов, так как фактически должен быть прочитан из файла (эта часть упрощена для примера, чтение из файла работает нормально)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...