退出 BeforeScenario 块时 webDriver = null

webDriver = null when exiting BeforeScenario block

我有一个基本的 Gherkin / selenium 框架。其中有一个 BeforeScenario 和 AfterScenario 代码块。 BeforeScenario 代码块按预期工作,但一旦退出,webDriver 就会变为 null,因此 AfterScenario 中的代码不会 运行 .quit() 代码。

步骤:

using Coypu;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using TechTalk.SpecFlow;

namespace Steps
{
    [Binding]
    public class Steps
    {
        public IWebDriver webDriver;

        [BeforeScenario]
        public void BeforeScenario()
        {
            // BeforeScenario code
            ChromeOptions options = new ChromeOptions();
            options.AddArguments("--incognito");
            options.AddArguments("start-maximized");
            IWebDriver webDriver = new ChromeDriver(options);
            webDriver.Navigate().GoToUrl("URL");
        }

        [AfterScenario]
        public void AfterScenario()
        {
            // BeforeScenario code
            if (webDriver == null)
            {
                throw new Exception("Driver is null, call BeforeScenario() first.");
            }
            webDriver.Quit();
        }

        [Given(@"testOne")]
        public void GivenTestOne()
        {
            webDriver.FindElement(By.TagName("body")).Text.Contains("text");
        }
    }
}

特征:

Feature: Welcome-Page-Elements

Scenario: test
    Given testOne

如评论中所述,您似乎正在创建一个新变量 webDriver,其范围仅限于 BeforeScenario

解决办法是改变这个:

// declares a new method level webDriver
IWebDriver webDriver = new ChromeDriver(options);

对此:

// uses class level webDriver
webDriver = new ChromeDriver(options);