У меня следующая проблема. Мне нужно зарегистрировать свой экземпляр webdriver внутри метода Specflow BeforeFeature с помощью внедрения контекста, но этот метод должен быть статическим. У меня ошибка, что мой глобальный ...

3
Bohdan 19 Янв 2021 в 19:38

1 ответ

Лучший ответ

Я предполагаю, что вы хотите инициализировать веб-драйвер только один раз для каждой функции и повторно использовать существующий объект веб-драйвера для каждого сценария в этой функции.

Как вы заметили, хук BeforeFeature статичен. Вы все еще можете использовать это для инициализации веб-драйвера, но назначьте его статическому полю в вашем классе хуков. Затем внутри BeforeScenario зарегистрируйте статический объект веб-драйвера в контейнере внедрения зависимости:

[Binding]
public class SpecflowHooks
{
    private static IWebDriver driver;
    private readonly IObjectContainer container;

    public SpecflowHooks(IObjectContainer container)
    {
        this.container = container;
    }

    [BeforeFeature]
    public static void OneTime()
    {
        ChromeOptions options = new ChromeOptions();
        options.AddArgument("--ignore-ssl-errors=yes");
        options.AddArgument("--ignore-certificate-errors");

        driver = new ChromeDriver(options); // <-- don't forget to pass 'options' here
        driver.Manage().Window.Maximize();
        driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);

    }

    [BeforeScenario]
    public void SetUp()
    {
        container.RegisterInstanceAs<IWebDriver>(driver);
    }

    [AfterScenario]
    public void TearDown()
    {
    }

    [AfterFeature]
    public static void FeatureTearDown()
    {
        if (driver == null)
            return;

        driver.Close();
        driver.Dispose();
        driver = null;
    }
}
2
Greg Burghardt 19 Янв 2021 в 18:26