名称“ objectContainer”不存在于当前上下文|如何初始化SpecFlow中的ObjectContainer
我遇到了一个问题,试图通过SpecFlow运行自动测试。错误不是在本地发生的,但是当我尝试将测试上传到TFS时。
在当前上下文中
我已经尝试过几种解决方案,但是到目前为止似乎一切都没有起作用,我正在共享文件与您一起代码
一般钩子
using BoDi;
using InternetBanking.Tests.Helpers;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Edge;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;
using System;
using System.Configuration;
using System.IO;
using TechTalk.SpecFlow;
namespace InternetBanking.Tests
{
[Binding]
public class HookGeral
{
private IWebDriver _driver;
public string _IBUITestsUri;
public string _urlLogin;
public string _urlLogout;
public string _urlHome;
public string _userName;
public string _password;
public string _newPassword;
private ScenarioContext _scenarioContext;
private IObjectContainer _objectContainer;
public string Browser { get; } = ConfigurationManager.AppSettings.Get("Browser");
public string IBUITestsUri { get; } = $"{ConfigurationManager.AppSettings.Get("IB-
uitests-uri")}";
public string UrlLogin { get; } = $"{ConfigurationManager.AppSettings.Get("IB-
uitests-uri")}/usuario/login";
public string UrlLogout { get; } = $"{ConfigurationManager.AppSettings.Get("IB-
uitests-uri")}/usuario/logout";
public string UrlHome { get; } = $"{ConfigurationManager.AppSettings.Get("IB-
uitests-uri")}/home";
public string UserName { get; } = ConfigurationManager.AppSettings.Get("Username");
public string Password { get; } = ConfigurationManager.AppSettings.Get("Password");
public string NewPassword { get; } =
ConfigurationManager.AppSettings.Get("NewPassword");
public string Login { get; } = ConfigurationManager.AppSettings.Get("Login");
public HookGeral(ScenarioContext scenarioContext, IObjectContainer objectContainer)
{
_scenarioContext = scenarioContext;
_objectContainer = objectContainer;
}
[BeforeScenario]
public void BeforeScenario()
{
DefineBrowserDriver();
_scenarioContext.Add("driver", _driver);
_scenarioContext.Add("IB-uitests-uri", IBUITestsUri);
_scenarioContext.Add("UrlLogin", UrlLogin);
_scenarioContext.Add("UrlLogout", UrlLogout);
_scenarioContext.Add("UrlHome", UrlHome);
_scenarioContext.Add("Username", UserName);
_scenarioContext.Add("Password", Password);
_scenarioContext.Add("NewPassword", NewPassword);
_scenarioContext.Add("Login", Login);
}
[AfterScenario]
public void AfterScenario()
{
try
{
string path = "C:\\IBNet-AutoTests-Pics\\";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
Screenshot ss = ((ITakesScreenshot)_driver).GetScreenshot();
string sstitle = _scenarioContext.ScenarioInfo.Title.ToString();
ss.SaveAsFile($"{path}{sstitle}.jpg", ScreenshotImageFormat.Jpeg);
}
catch (Exception)
{
}
finally
{
IWebDriver driver = _objectContainer.Resolve<IWebDriver>();
driver.Quit(); // Close the console app that was used to kick off the chrome
window
driver.Dispose(); // Close the chromedriver.exe
}
}
public class WebDriverController : IDisposable
{
public IWebDriver Driver;
public void Dispose()
{
Driver.Dispose();
}
}
private void DefineBrowserDriver()
{
EBrowser browser;
Enum.TryParse(Browser, true, out browser);
switch (browser)
{
case EBrowser.IE:
_driver = new InternetExplorerDriver();
break;
case EBrowser.Edge:
_driver = new EdgeDriver();
break;
case EBrowser.Firefox:
_driver = new FirefoxDriver();
break;
default:
ChromeOptions options = new ChromeOptions();
options.AddArgument("--start-maximized");
options.AddArgument("--disable-infobars");
options.AddArgument("--disable-extensions");
options.AddArgument("--disable-gpu");
options.AddArgument("--disable-dev-shm-usage");
options.AddArgument("--no-sandbox");
options.AddArgument("--ignore-certificate-errors");
options.AddArgument("--headless");
options.AcceptInsecureCertificates = true;
_driver = new ChromeDriver(ChromeDriverService.CreateDefaultService(), options, TimeSpan.FromMinutes(3));
_driver.Manage().Timeouts().PageLoad.Add(TimeSpan.FromSeconds(30));
break;
}
_objectContainer.RegisterInstanceAs(_driver);
}
}
}
台词,
using BoDi;
using InternetBanking.Tests.Helpers;
using NUnit.Framework;
using OpenQA.Selenium;
using System;
using TechTalk.SpecFlow;
namespace InternetBanking.Tests.Steps
{
[Binding]
public class StepsBase
{
public IWebDriver _driver;
public string _IBUITestsUri;
public string _urlLogin;
public string _urlLogout;
public string _urlHome;
public string _userName;
public string _password;
public string _newPassword;
public ScenarioContext _scenarioContext;
public IObjectContainer _objectContainer;
public StepsBase(ScenarioContext scenarioContext)
{
_scenarioContext = scenarioContext;
_driver = _scenarioContext["driver"] as IWebDriver;
_objectContainer.RegisterInstanceAs(_driver);
_IBUITestsUri = _scenarioContext["IB-uitests-uri"] as string;
_urlLogin = _scenarioContext["UrlLogin"] as string;
_urlLogout = _scenarioContext["UrlLogout"] as string;
_urlHome = _scenarioContext["UrlHome"] as string;
_userName = _scenarioContext["Username"] as string;
_password = _scenarioContext["Password"] as string;
_newPassword = _scenarioContext["NewPassword"] as string;
WDCustomFunctions.DefineDriver(_driver);
}
请事先感谢您的所有帮助。谢谢
I'm having a problem trying to run my automated tests with specflow. The error does not happen locally but when I try to upload the tests to TFS.
I managed to simulate the error locally and it happens in the NUnit.Assembly file, the error is due to it saying that the "objectContainer" does not exist in the current context
I've tried several solutions but so far nothing seems to work, I'm sharing the file codes with you
General Hook
using BoDi;
using InternetBanking.Tests.Helpers;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Edge;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;
using System;
using System.Configuration;
using System.IO;
using TechTalk.SpecFlow;
namespace InternetBanking.Tests
{
[Binding]
public class HookGeral
{
private IWebDriver _driver;
public string _IBUITestsUri;
public string _urlLogin;
public string _urlLogout;
public string _urlHome;
public string _userName;
public string _password;
public string _newPassword;
private ScenarioContext _scenarioContext;
private IObjectContainer _objectContainer;
public string Browser { get; } = ConfigurationManager.AppSettings.Get("Browser");
public string IBUITestsUri { get; } = quot;{ConfigurationManager.AppSettings.Get("IB-
uitests-uri")}";
public string UrlLogin { get; } = quot;{ConfigurationManager.AppSettings.Get("IB-
uitests-uri")}/usuario/login";
public string UrlLogout { get; } = quot;{ConfigurationManager.AppSettings.Get("IB-
uitests-uri")}/usuario/logout";
public string UrlHome { get; } = quot;{ConfigurationManager.AppSettings.Get("IB-
uitests-uri")}/home";
public string UserName { get; } = ConfigurationManager.AppSettings.Get("Username");
public string Password { get; } = ConfigurationManager.AppSettings.Get("Password");
public string NewPassword { get; } =
ConfigurationManager.AppSettings.Get("NewPassword");
public string Login { get; } = ConfigurationManager.AppSettings.Get("Login");
public HookGeral(ScenarioContext scenarioContext, IObjectContainer objectContainer)
{
_scenarioContext = scenarioContext;
_objectContainer = objectContainer;
}
[BeforeScenario]
public void BeforeScenario()
{
DefineBrowserDriver();
_scenarioContext.Add("driver", _driver);
_scenarioContext.Add("IB-uitests-uri", IBUITestsUri);
_scenarioContext.Add("UrlLogin", UrlLogin);
_scenarioContext.Add("UrlLogout", UrlLogout);
_scenarioContext.Add("UrlHome", UrlHome);
_scenarioContext.Add("Username", UserName);
_scenarioContext.Add("Password", Password);
_scenarioContext.Add("NewPassword", NewPassword);
_scenarioContext.Add("Login", Login);
}
[AfterScenario]
public void AfterScenario()
{
try
{
string path = "C:\\IBNet-AutoTests-Pics\\";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
Screenshot ss = ((ITakesScreenshot)_driver).GetScreenshot();
string sstitle = _scenarioContext.ScenarioInfo.Title.ToString();
ss.SaveAsFile(quot;{path}{sstitle}.jpg", ScreenshotImageFormat.Jpeg);
}
catch (Exception)
{
}
finally
{
IWebDriver driver = _objectContainer.Resolve<IWebDriver>();
driver.Quit(); // Close the console app that was used to kick off the chrome
window
driver.Dispose(); // Close the chromedriver.exe
}
}
public class WebDriverController : IDisposable
{
public IWebDriver Driver;
public void Dispose()
{
Driver.Dispose();
}
}
private void DefineBrowserDriver()
{
EBrowser browser;
Enum.TryParse(Browser, true, out browser);
switch (browser)
{
case EBrowser.IE:
_driver = new InternetExplorerDriver();
break;
case EBrowser.Edge:
_driver = new EdgeDriver();
break;
case EBrowser.Firefox:
_driver = new FirefoxDriver();
break;
default:
ChromeOptions options = new ChromeOptions();
options.AddArgument("--start-maximized");
options.AddArgument("--disable-infobars");
options.AddArgument("--disable-extensions");
options.AddArgument("--disable-gpu");
options.AddArgument("--disable-dev-shm-usage");
options.AddArgument("--no-sandbox");
options.AddArgument("--ignore-certificate-errors");
options.AddArgument("--headless");
options.AcceptInsecureCertificates = true;
_driver = new ChromeDriver(ChromeDriverService.CreateDefaultService(), options, TimeSpan.FromMinutes(3));
_driver.Manage().Timeouts().PageLoad.Add(TimeSpan.FromSeconds(30));
break;
}
_objectContainer.RegisterInstanceAs(_driver);
}
}
}
StepsBase
using BoDi;
using InternetBanking.Tests.Helpers;
using NUnit.Framework;
using OpenQA.Selenium;
using System;
using TechTalk.SpecFlow;
namespace InternetBanking.Tests.Steps
{
[Binding]
public class StepsBase
{
public IWebDriver _driver;
public string _IBUITestsUri;
public string _urlLogin;
public string _urlLogout;
public string _urlHome;
public string _userName;
public string _password;
public string _newPassword;
public ScenarioContext _scenarioContext;
public IObjectContainer _objectContainer;
public StepsBase(ScenarioContext scenarioContext)
{
_scenarioContext = scenarioContext;
_driver = _scenarioContext["driver"] as IWebDriver;
_objectContainer.RegisterInstanceAs(_driver);
_IBUITestsUri = _scenarioContext["IB-uitests-uri"] as string;
_urlLogin = _scenarioContext["UrlLogin"] as string;
_urlLogout = _scenarioContext["UrlLogout"] as string;
_urlHome = _scenarioContext["UrlHome"] as string;
_userName = _scenarioContext["Username"] as string;
_password = _scenarioContext["Password"] as string;
_newPassword = _scenarioContext["NewPassword"] as string;
WDCustomFunctions.DefineDriver(_driver);
}
Thanks in advance for all the help. Thank you
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
更多
发布评论