名称“ objectContainer”不存在于当前上下文|如何初始化SpecFlow中的ObjectContainer

发布于 2025-02-09 16:52:47 字数 6974 浏览 1 评论 0原文

我遇到了一个问题,试图通过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.

enter image description here

enter image description here

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

Error image

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文