Запуск Specrun и использование Baseclass.contrib.Specflow для параметризованных кросс-браузерных тестов в VS2015

Я хотел бы использовать SpecRunner вместе с библиотекой "Baseclass.Contrib.SpecFlow.Selenium.NUnit." Когда я добавил SpecRunner для SpecFlow 2 из пакета "Управление пакетами Nuget", в модуле app.config поставщиком модульного теста был "SpecRun". Затем при добавлении в Baseclass.Contrib.SpecFlow.Selenium.NUnit к решению с использованием пакета управления Nuget был также добавлен поставщик модульных тестов SeleniumNUnit. Когда я создал свои файлы компонентов и определения шагов и попытался запустить тесты с каждой функцией, помеченной тегом браузера, например "@Browser: Chrome", и использовать синтаксис "Browser.Current" в качестве веб-драйвера в моих методах привязки, он дал мне ошибка. Сначала была ошибка: у меня в app.config было два поставщика модульных тестов, и в app.config может быть только один поставщик модульных тестов. Итак, я закомментировал первого провайдера модульных тестов и получил еще один набор ошибок:

* Ошибка 2 # ошибка: "Ошибка создания: не удалось загрузить файл или сборку" TechTalk.SpecFlow, Версия =1.9.0.77, Культура = нейтральная, PublicKeyToken=0778194805d6db41'или одна из ее зависимостей. Система не может найти указанный файл.' C:\Users\amaddox\ Documents\visual studio 2013\ Проекты \ SpecFlow \ SpecFlow \ SpecFlowFeature1.feature.cs 1 8 SpecFlow *

* Ошибка 33 Ошибка пользовательского инструмента: Ошибка создания: не удалось загрузить файл или сборку 'TechTalk.SpecFlow, версия =1.9.0.77, культура = нейтральная, PublicKeyToken = 0778194805d6db41' или одна из ее зависимостей. Система не может найти указанный файл. C:\Users\amaddox\ Documents\visual studio 2013\ Проекты \SpecFlow\SpecFlow\SpecFlowFeature1.feature 2 2 SpecFlow *

Тогда я попытался раскомментировать первый и прокомментировать второй провайдер модульного тестирования. Та же проблема. Как я могу запустить SpecRun в Visual Studio 2015 наряду с гибкостью параметризованной функциональности кросс-браузерных тестов, которую может предложить 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>

*

2 ответа

После короткого взгляда на Baseclass.Contrib.SpecFlow.Selenium.NUnit это зависит от SpecFlow 1.9. Если вы хотите использовать его, вы должны придерживаться SpecFlow 1.9. Кроме того, похоже, что они создают свой собственный GeneratorPlugin для генерации пользовательского кода за файлами.

Это не работает вместе со SpecFlow+Runner, поскольку у него есть собственный генератор.

И два unitTestProviders в конфиге не работают.

Но у SpecFlow+Runner есть функция под названием "Цели", см. http://www.specflow.org/plus/documentation/SpecFlowPlus-Runner-Profiles и найдите ее там.

Вы можете создать цель для каждого из ваших браузеров и использовать шаг ConfigFileTransformation для настройки вашей конфигурации для разных браузеров.

Другой способ, но я не уверен, что это работает. SpecFlow+Runner поддерживает SpecFlow 1.9 и может выполнять тесты NUnit. Используйте пакет nuget SpecRun.SpecFlow.1-9-0 и настройте для unitTestProvider значение baseClass. Если они генерируют стандартные атрибуты NUnit, SpecFlow+Runner должен найти тесты и может выполнить их. Но имейте в виду, что вы теряете некоторые функции с этим методом.

Полное раскрытие: я один из разработчиков SpecFlow и SpecFlow +

Я переписал Baseclass.Contrib.SpecFlow.Selenium.NUnit для поддержки 2.1.

Новая кодовая база, поддержка тегов @ignore для nunit3 и нескольких сервисов тестирования, таких как BrowserStack, SauceLabs, TestingBot.

Другие вопросы по тегам