Я проводил тесты 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. Большое спасибо.