C# 在[AfterScenario]中退出浏览器
我试图学习C#和Selenium,在我的第一个项目中,我试图为[BeforeSecenario]和[AfterScenario]编写代码。我已经设法让[BeforeSecenario]正常工作,但是我很难在[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
[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;看看它是否为空,也许驱动程序在到达赛后之前就变成了空。