在VS2015中运行Specrun并使用'Baseclass.contrib.Specflow'进行跨浏览器参数化测试



我想将 SpecRunner 与库 'Baseclass.Contrib.SpecFlow.Selenium.NUnit' 一起使用。 当我从管理 Nuget 包中添加 SpecFlow 2 的 SpecRunner 时,单元测试提供程序是 app.config 中的"SpecRun"。 然后,当使用管理 Nuget 包添加到解决方案中的"Baseclass.Contrib.SpecFlow.Selenium.NUnit"时,它还添加了"SeleniumNUnit"的单元测试提供程序。 当我创建功能文件和步骤定义并尝试使用浏览器标记(如"@Browser:Chrome")注释的每个功能运行测试,并在绑定方法中使用"Browser.Current"语法作为 Web 驱动程序时,它给了我一个错误。 错误首先是我在 app.config 中有两个单元测试提供程序,并且 app.config 只能有一个单元测试提供程序。所以我注释掉了第一个单元测试提供程序,并收到了另一组错误:

*错误 2 #error:"生成错误:无法加载文件或程序集'TechTalk.SpecFlow,版本=1.9.0.77,区域性=中性,公钥令牌=0778194805d6db41'或其依赖项之一。系统找不到指定的文件。 C:\Users\amaddox\documents\visual studio 2013\Projects\SpecFlow\SpecFlow\SpecFlowFeature1.feature.cs 1 8 SpecFlow*

*错误 33 自定义工具错误:生成错误:无法加载文件或程序集"TechTalk.SpecFlow,版本=1.9.0.77,区域性=中性,公钥令牌=0778194805d6db41"或其依赖项之一。系统找不到指定的文件。C:\Users\amaddox\documents\visual studio 2013\Projects\SpecFlow\SpecFlow\SpecFlowFeature1.feature 2 2 SpecFlow*

因此,我尝试取消注释第一个并注释第二个单元测试提供程序。同样的问题。如何在Visual Studio 2015中运行SpecRun以及"Baseclass.Contrib.SpecFlow.Selenium.NUnit.Bindings"必须提供的参数化跨浏览器测试功能的灵活性?它似乎希望我回到以前版本的 Specflow (1.9),并且我正在使用 Specflow 2。 不知道该怎么做。 如何解决此问题?

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow" />
  <section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration" /></configSections>
  <specFlow>
    <!-- For additional details on SpecFlow configuration options see http://go.specflow.org/doc-config -->
  <!-- For additional details on SpecFlow configuration options see http://go.specflow.org/doc-config --><!-- use unit test provider SpecRun+NUnit or SpecRun+MsTest for being able to execute the tests with SpecRun and another provider --><unitTestProvider name="SpecRun" /><plugins>
      <add name="SpecRun" />
    <add name="Baseclass.Contrib.SpecFlow.Selenium.NUnit" path="..packagesBaseclass.Contrib.SpecFlow.Selenium.NUnit.1.3.1tools" /></plugins><unitTestProvider name="SeleniumNUnit" /><stepAssemblies>
      <stepAssembly assembly="Baseclass.Contrib.SpecFlow.Selenium.NUnit.Bindings" />
    </stepAssemblies></specFlow>
<appSettings>
    <add key="seleniumBaseUrl" value="http://localhost:58909" />
  </appSettings><autofac>
    <components>
      <component name="IE" type="OpenQA.Selenium.IE.InternetExplorerDriver, WebDriver" service="OpenQA.Selenium.IWebDriver, WebDriver" instance-scope="per-dependency">
      </component>
      <component name="Chrome" type="OpenQA.Selenium.Chrome.ChromeDriver, WebDriver" service="OpenQA.Selenium.IWebDriver, WebDriver" instance-scope="per-dependency">
      </component>
      <component name="Firefox" type="OpenQA.Selenium.Firefox.FirefoxDriver, WebDriver" service="OpenQA.Selenium.IWebDriver, WebDriver" instance-scope="per-dependency">
      </component>
      <!-- Example of using an injected RemoteDriver:
      <component
              name="IE"
              type="Baseclass.Contrib.SpecFlow.Selenium.NUnit.RemoteWebDriver, Baseclass.Contrib.SpecFlow.Selenium.NUnit.SpecFlowPlugin"
              service="OpenQA.Selenium.IWebDriver, WebDriver"
              instance-scope="per-dependency">
        <parameters>
          <parameter name="url" value="http://127.0.0.1:4444/wd/hub" />
          <parameter name="browser" value="InternetExplorer">
          </parameter>
        </parameters>
      </component>-->
    </components>
  </autofac>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="TechTalk.SpecFlow" publicKeyToken="0778194805d6db41" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

*

在短暂浏览 Baseclass.Contrib.SpecFlow.Selenium.NUnit 之后,它依赖于 SpecFlow 1.9。如果你想使用它,你必须坚持使用SpecFlow 1.9。此外,看起来他们创建了自己的生成器插件来生成文件背后的自定义代码。

这不能与SpecFlow+Runner一起使用,因为它有自己的生成器。

并且配置中的两个单元测试提供程序不起作用。

但是SpecFlow+Runner有一个名为"目标"的功能,请参阅 http://www.specflow.org/plus/documentation/SpecFlowPlus-Runner-Profiles 并在那里搜索它。

您可以为每个浏览器创建一个目标,并使用配置文件转换步骤针对不同的浏览器调整配置。

另一种方式,但我不确定这是否有效。SpecFlow+Runner 支持 SpecFlow 1.9,可以执行 NUnit 测试。使用 SpecRun.SpecFlow.1-9-0 nuget 包并将 unitTestProvider 配置为 baseClass 之一。如果他们生成标准的 NUnit 属性,SpecFlow+Runner 应该找到测试并可以执行它们。但请注意,使用该方法会丢失某些功能。

完全披露:我是SpecFlow和SpecFlow+的开发人员之一

我重写了Baseclass.Contrib.SpecFlow.Selenium.NUnit以支持2.1。

新的代码库,对nunit3的@ignore标签支持以及BrowserStack,SauceLabs,TestingBot等几个测试服务。

相关内容

  • 没有找到相关文章

最新更新