title: Specflow - TearDown failed for test fixture - System.ArgumentNullException : Value cannot be null. (Parameter 'key')
body: <p>I'm working with test automation using <strong>Specflow</strong> and <strong>Selenium</strong> but by the time I try to execute my test, I face these error messages:</p>
  
  <ul>
  <li>My question is not what is a NullReferenceException, but what (and where) is this <strong>Parameter 'key'</strong> pointed as the cause of the exception.</li>
  </ul>
  
  <blockquote>
    <p>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.</p>
  </blockquote>
  
  <p>And:</p>
  
  <blockquote>
    <p>Error Message:
       OneTimeSetUp: System.ArgumentNullException : Value cannot be null. (Parameter 'key')</p>
  </blockquote>
  
  <p>This is my scenario:</p>
  
  <pre><code>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"
  </code></pre>
  
  <p>This is my StepDefinition.cs file:</p>
  
  <pre><code>    [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));
          }        
      }
  </code></pre>
  
  <p>This is my PageObject.cs file:</p>
  
  <pre><code>        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 =&gt; u.FindElement(_byIdOfWebElementHere_).Displayed);
  
              IWebElement element = driver.FindElement(_byIdOfWebElementHere_);
              return element.Displayed;
          }
  </code></pre>
  
  <p>And this is the BasePageObject.cs file, which implements IDisposable interface:</p>
  
  <pre><code>        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();
          }
      }
  </code></pre>
  
  <p>Exception Stack trace:</p>
  
  <pre><code>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&amp; value)
     at TechTalk.SpecFlow.Bindings.Discovery.RuntimeBindingRegistryBuilder.FindAttributeConstructorArg(ParameterInfo parameterInfo, Dictionary`2 namedAttributeValues)
     at TechTalk.SpecFlow.Bindings.Discovery.RuntimeBindingRegistryBuilder.&lt;&gt;c__DisplayClass8_0.&lt;CreateAttribute&gt;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 [&lt; 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
  </code></pre>
  
  <p><strong>Things I think are important to point:</strong></p>
  
  <ul>
  <li>I am using <strong>VSCode</strong>, not Visual Studio. </li>
  <li>The test runner I have installed on my project is NUnit.</li>
  </ul>