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

时间:2016-07-14 14:49:57

标签: specrun

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

*错误2 #error:'生成错误:无法加载文件或程序集' TechTalk.SpecFlow,Version = 1.9.0.77,Culture = neutral,PublicKeyToken = 0778194805d6db41'或其中一个依赖项。系统找不到指定的文件。' C:\ Users \ amaddox \ documents \ visual studio 2013 \ Projects \ SpecFlow \ SpecFlow \ SpecFlowFeature1.feature.cs 1 8 SpecFlow *

*错误33自定义工具错误:生成错误:无法加载文件或程序集' TechTalk.SpecFlow,Version = 1.9.0.77,Culture = neutral,PublicKeyToken = 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="..\packages\Baseclass.Contrib.SpecFlow.Selenium.NUnit.1.3.1\tools" /></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>
&#13;
&#13;
&#13;

*

2 个答案:

答案 0 :(得分:0)

简要介绍一下Baseclass.Contrib.SpecFlow.Selenium.NUnit后,它取决于SpecFlow 1.9。如果你想使用它,你必须坚持使用SpecFlow 1.9。 此外,看起来他们创建自己的GeneratorPlugin来生成文件后面的自定义代码。

这与SpecFlow + Runner不兼容,因为它有自己的生成器。

配置中的两个unitTestProviders不起作用。

但SpecFlow + Runner有一项名为“Targets”的功能,请参阅http://www.specflow.org/plus/documentation/SpecFlowPlus-Runner-Profiles并在那里搜索。

您可以为每个浏览器创建目标,并使用ConfigFileTransformation步骤调整不同浏览器的配置。

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

完全披露:我是SpecFlow和SpecFlow +

的开发人员之一

答案 1 :(得分:0)

I rewrote Baseclass.Contrib.SpecFlow.Selenium.NUnit for 2.1 support.

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