Параллельный запуск тестов Specflow Selenium Webdriver - метод доступа stati c не может использоваться при многопоточном выполнении - PullRequest
1 голос
/ 26 февраля 2020

Я проводил тесты Selenium Webdriver с C# Specflow успешно, включая параллельное тестирование с использованием атрибута AssemblyInfo.cs:

   [assembly: Parallelizable(ParallelScope.Fixtures)] 

Это работало нормально, но мне пришлось добавить несколько хитов stati c [BeforeTestRun] и [BeforeFeature], а также средства для создания отчета по экстентам. С перехватами stati c теперь выдается ошибка:

Сообщение: TechTalk.SpecFlow.SpecFlowException: метод доступа ScenarioStepContext.Current stati c не может использоваться в многопоточном выполнении. Попробуйте внедрить контекст сценария в класс привязки. Подробнее см. http://go.specflow.org/doc-multithreaded.

Я попытался внедрить контекстную инъекцию, как рекомендовано в ссылке (я думал, что я делал это правильно в первую очередь), но я, очевидно, делать что-то не так.

    [Binding]
    public class SetupSteps : Steps
    {

        public IWebDriver driver;

        private readonly IObjectContainer objectContainer;
        private static WebDriverContext webDriverContext;

        private static ExtentReports extent;
        private static ExtentTest scenario;
        private static ExtentTest feature;

        public FeatureContext featureContext;
        public ScenarioContext scenarioContext;

        public SetupSteps(IObjectContainer container, ScenarioContext scenarioContext, FeatureContext featureContext) 
        {
            this.objectContainer = container;
            this.scenarioContext = scenarioContext;
            this.featureContext = featureContext;

        }

        [BeforeTestRun]
        public static void InitialiseReport()
        {
            only implemented for extent report..etc...
        }

        [AfterTestRun]
        public static void TearDownReport()
        {
            extent.Flush(); 
        }

        [BeforeFeature]
        public static void BeforeFeature(FeatureContext featureContext)
        {
            feature = extent.CreateTest<Feature>(featureContext.FeatureInfo.Title);       
        }

        [AfterFeature]
        public static void AfterFeature()
        {
        }

        [BeforeScenario]
        public void Setup(ScenarioContext scenarioContext)
        {
            scenario = feature.CreateNode<Scenario>(scenarioContext.ScenarioInfo.Title);

            webDriverContext = new WebDriverContext();
            driver = webDriverContext.driver;
            objectContainer.RegisterInstanceAs<WebDriverContext>(webDriverContext);
            ...etc....
        }

        [AfterScenario]
        public void Cleanup()
        {
            //close and disposes
        }

Любой совет, почему это не так? Удаление аксессора stati c и добавление параметров к новым хукам приводит к различным ошибкам BoDi. Большое спасибо.

...