C# 在[AfterScenario]中退出浏览器

C# 在[AfterScenario]中退出浏览器,c#,selenium,selenium-webdriver,selenium-chromedriver,C#,Selenium,Selenium Webdriver,Selenium Chromedriver,我试图学习C#和Selenium,在我的第一个项目中,我试图为[BeforeSecenario]和[AfterScenario]编写代码。我已经设法让[BeforeSecenario]正常工作,但是我很难在[AfterScenario]中退出浏览器 [场景之前] [BeforeScenario] public void BeforeScenario() { ChromeOptions options = new ChromeOptions(); options.AddArgume

我试图学习C#和Selenium,在我的第一个项目中,我试图为[BeforeSecenario]和[AfterScenario]编写代码。我已经设法让[BeforeSecenario]正常工作,但是我很难在[AfterScenario]中退出浏览器

[场景之前]

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

[AfterScenario]
public void AfterScenario()
{
    webDriver.Quit()
}
为什么我的
webDriver.Quit()
总是抛出错误

webDriver上出现错误

'名称'webDriver'在当前上下文中不存在'

新代码:

public class Steps
{
    public IWebDriver webDriver = null;

    [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("http://10.118.88.50");
    }

    [AfterScenario]
    public void AfterScenario()
    {
        // AfterScenario code
        if (webDriver == null)
        {
            throw new Exception("Driver is null, call BeforeScenario() first.");
        }
        webDriver.Quit();
    }
在遵循下面评论中的建议之后,现在拥有上面的代码。该错误已被删除,但是当代码到达AfterScenario时,它始终为空。当代码处于Before场景中时,webDriver就可以了


这里我缺少什么

您在beforecasenario()函数中创建了webDriver变量

当您在AfterScenario()中使用它时,该函数不知道“webDriver”是什么。创建一个可由两个函数访问的类变量

public IWebDriver webDriver;
并在BeforeCasenario中初始化它,以便您可以在AfterScenario中使用它

一个好方法是将类中的webdriver初始化为null,这样,如果在BeforeCasenario()之前运行AfterScenario(),则可以捕获异常,如下所示:

public IWebDriver driver = null;

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

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

您可以在beforecasenario()函数中创建webDriver变量

当您在AfterScenario()中使用它时,该函数不知道“webDriver”是什么。创建一个可由两个函数访问的类变量

public IWebDriver webDriver;
并在BeforeCasenario中初始化它,以便您可以在AfterScenario中使用它

一个好方法是将类中的webdriver初始化为null,这样,如果在BeforeCasenario()之前运行AfterScenario(),则可以捕获异常,如下所示:

public IWebDriver driver = null;

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

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

你能告诉我们错误是什么吗?似乎是编译错误?变量可见性我同意拖放。您需要在类级别声明webDriver。您能告诉我们错误是什么吗?似乎是编译错误?变量可见性我同意拖放。您需要在类级别声明webDriver。我使用了您的代码,它消除了错误,但是当代码在Scenario之后运行时,webDriver始终为空。@Ross在Scenario之前和Scenario之后是否有任何代码行使驱动程序为空?在测试本身中?不,我不这么认为,我上面粘贴的方式是它在我的代码中的方式。这是使用小黄瓜脚本创建场景。这个场景可以使驱动程序为空吗?我不知道小黄瓜脚本是如何工作的,但是你可以调试这个场景,看看驱动程序在哪里变为空吗?可能转到场景代码的开头,执行IWebDriver testDriver1=driver;因此,您可以在调试驱动程序时查看驱动程序是否正常,并且在测试结束时,再执行一次IWebDriver testDriver2=driver;然后看看它是否为空,可能驱动程序在到达AfterScenario之前就变成了空。我使用了你的代码,它消除了错误,但是当代码在AfterScenario运行时,webDriver总是为空。@Ross在场景之前和场景之后之间有没有代码行使驱动程序为空?在测试本身中?不,我不这么认为,我上面粘贴的方式是它在我的代码中的方式。这是使用小黄瓜脚本创建场景。这个场景可以使驱动程序为空吗?我不知道小黄瓜脚本是如何工作的,但是你可以调试这个场景,看看驱动程序在哪里变为空吗?可能转到场景代码的开头,执行IWebDriver testDriver1=driver;因此,您可以在调试驱动程序时查看驱动程序是否正常,并且在测试结束时,再执行一次IWebDriver testDriver2=driver;看看它是否为空,也许驱动程序在到达赛后之前就变成了空。