c# - Specflow - 测试夹具的 TearDown 失败 - System.ArgumentNullException:值不能为空。(参数“键”)
问题描述
我正在使用Specflow和Selenium进行测试自动化,但是当我尝试执行测试时,我遇到了以下错误消息:
- 我的问题不是什么是 NullReferenceException,而是这个参数“键”指向什么(以及在哪里)作为异常的原因。
测试夹具 MyProject.Features.MyFeature System.ArgumentNullException 的 TearDown 失败:值不能为空。(参数'key') TearDown:System.NullReferenceException:对象引用未设置为对象的实例。
和:
错误消息:OneTimeSetUp:System.ArgumentNullException:值不能为空。(参数“键”)
这是我的场景:
Scenario: Accessing the screen for the first time
Given I accessed the screen for the first time
Then the result grid should only show the phrase "Lorem ipsum"
这是我的 StepDefinition.cs 文件:
[Binding]
public class StepDefinition
{
PageObject pageObject = new PageObject();
[Given(@"I accessed the screen for the first time")]
public void GivenIAccessedTheScreenForTheFirstTime()
{
pageObject.NavigateToScreen();
}
[Then(@"the result grid should only show the phrase (.*)")]
public void ThenTheResultGridShouldOnlyShowThePhrase(string phrase)
{
Assert.True(pageObject.isPhraseDisplayed(phrase));
}
}
这是我的 PageObject.cs 文件:
public PageObject() : base(){ } //I use a BasePageObject.cs file also
public void NavigateToScreen()
{
driver.Navigate().GoToUrl(_urlHere_);
}
public bool isPhraseDisplayed(string phrase)
{
wait.Until(u => u.FindElement(_byIdOfWebElementHere_).Displayed);
IWebElement element = driver.FindElement(_byIdOfWebElementHere_);
return element.Displayed;
}
这是 BasePageObject.cs 文件,它实现了 IDisposable 接口:
protected IWebDriver driver { get; set; }
protected WebDriverWait wait { get; set; }
public BasePageObject()
{
driver = new ChromeDriver();
}
[AfterScenario]
public void Dispose()
{
driver.Close();
driver.Quit();
driver.Dispose();
}
}
异常堆栈跟踪:
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
TearDown failed for test fixture MyProject.Features.MyFeature
System.ArgumentNullException : Value cannot be null. (Parameter 'key')
TearDown : System.NullReferenceException : Object reference not set to an instance of an object.
at System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
at System.Collections.Generic.Dictionary`2.TryGetValue(TKey key, TValue& value)
at TechTalk.SpecFlow.Bindings.Discovery.RuntimeBindingRegistryBuilder.FindAttributeConstructorArg(ParameterInfo parameterInfo, Dictionary`2 namedAttributeValues)
at TechTalk.SpecFlow.Bindings.Discovery.RuntimeBindingRegistryBuilder.<>c__DisplayClass8_0.<CreateAttribute>b__7(ParameterInfo p)
at System.Linq.Enumerable.SelectArrayIterator`2.ToArray()
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at TechTalk.SpecFlow.Bindings.Discovery.RuntimeBindingRegistryBuilder.CreateAttribute(Attribute attribute)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.ToArray()
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at TechTalk.SpecFlow.Bindings.Discovery.RuntimeBindingRegistryBuilder.GetAttributes(IEnumerable`1 customAttributes)
at TechTalk.SpecFlow.Bindings.Discovery.RuntimeBindingRegistryBuilder.CreateBindingSourceMethod(MethodInfo methodDefinition)
at TechTalk.SpecFlow.Bindings.Discovery.RuntimeBindingRegistryBuilder.BuildBindingsFromType(Type type)
at TechTalk.SpecFlow.Bindings.Discovery.RuntimeBindingRegistryBuilder.BuildBindingsFromAssembly(Assembly assembly)
at TechTalk.SpecFlow.TestRunnerManager.BuildBindingRegistry(IEnumerable`1 bindingAssemblies)
at TechTalk.SpecFlow.TestRunnerManager.InitializeBindingRegistry(ITestRunner testRunner)
at TechTalk.SpecFlow.TestRunnerManager.CreateTestRunner(Int32 threadId)
at TechTalk.SpecFlow.TestRunnerManager.GetTestRunnerWithoutExceptionHandling(Int32 threadId)
at TechTalk.SpecFlow.TestRunnerManager.GetTestRunner(Int32 threadId)
at TechTalk.SpecFlow.TestRunnerManager.GetTestRunner(Assembly testAssembly, Nullable`1 managedThreadId)
at MyProject.Features.MyFeature.FeatureSetup()
--TearDown
at MyProject.Features.MyFeature.FeatureTearDown()
X AcessandoATelaDeConsultaPelaPrimeiraVez [< 1ms]
Error Message:
OneTimeSetUp: System.ArgumentNullException : Value cannot be null. (Parameter 'key')
Results File: C:\Users\FAMG\AppData\Local\Temp\test-explorer-GvcYR7\0.trx
Total tests: 1
Failed: 1
Total time: 3,7733 Seconds
我认为重要的是要指出:
- 我正在使用VSCode,而不是 Visual Studio。
- 我在项目中安装的测试运行器是 NUnit。
解决方案
我刚刚跑到这个确切的地方。
错误的根源来自对 type: 的反思System.Runtime.CompilerServices.NullableContextAttribute
。
看起来某种预期的构造函数 MethodInfo Name 为 NULL。
长话短说:.NET Core 2.1、2.2 工作。SpecFlow (3.0.225) 似乎不适用于 .Net Core 3.0。
好消息:开启包括 Nuget 的预发布,并获取 beta SpecFlow 和相关软件包(Nunit 和朋友)更新到(3.1.52-beta)最新作品。
SpecFlow 3.1 主要版本可能会支持 .Net Core 3.0。
推荐阅读
- javascript - useMemo on .map 语句中使用的函数
- python - 对 DASK 中的列中的每个值运行 mysql 查询
- python - 我希望我的角色只要按住按钮就可以做某事,然后在松开按钮后恢复正常
- reactjs - 具有给定令牌的 Axios 拦截器,React
- javascript - vanilla javascript使用链接的点击但不同的命令
- javascript - 触发日期更改时未触发 ng-change 事件
- java - 如何在 Spring Boot 中捕获客户端参数错误的“请求处理失败”?
- mysql - 续集加载初始数据
- outlook - Outlook 加载项的“额外费用披露”失败
- docker - 为什么`oom-kill-disable`对`kubectl create pod`无效,但对自己系统中的`docker run container`有效?