退出 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);
我有一个基本的 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);