2014-12-22 2 views
2

У меня есть тестовый проект, который содержит все сценарии Selenium, которые я хочу протестировать, и я хочу добавить проект SpecFlow к этому решению, которое, очевидно, будет использовать некоторые из методов WebDriver. Я не хочу дублировать свой код, но SpecFlow плохо работает с Selenium (например, Selenium использует атрибут [TestInitialize], который не разрешен в SpecFlow). Каков наилучший способ объединить два?Общие методы между Selenium и SpecFlow

Я хочу сделать те же шаги, что и в «SomeTestMethod», но с SpecFlow.

Это пример проекта:

public class SeleniumBaseTest : BaseTest 
{ 
    [AssemblyInitialize] 
    public static void Initialize(TestContext testContext) 
    { 
    } 

    Public SomeMethod() 
    { 
    } 
} 
[TestClass] 
public class SeleniumFeature : SeleniumBaseTest 
{ 
    [TestInitialize] 
    public void SeleInitialize() 
    { 
    } 

    [TestMethod] 
    public void SomeTestMethod() 
    {    
    } 
} 

ответ

1

Поскольку шаги SpecFlow действительно только общедоступные методы класса, который наследует от System.Object, просто создать экземпляр класса определения шага и вызвать открытые методы из вашего Селена теста ,

DataSteps.cs

[Binding] 
public class DataSteps 
{ 
    [Given("Something exists in the database")] 
    public void GivenSomethingExistsInTheDatabase() 
    { 
     // ... 
    } 
} 

В вашем Селен тестовый класс:

[TestClass] 
public class SeleniumFeature : SeleniumBaseTest 
{ 
    private DataSteps dataSteps; 

    [TestInitialize] 
    public void SeleInitialize() 
    { 
     dataSteps = new DataSteps(); 
    } 

    [TestMethod] 
    public void SomeTestMethod() 
    { 
     dataSteps.GivenSomethingExistsInTheDatabase(); 
    } 
} 

Единственная реальная боль, когда вам нужно использовать TechTalk.SpecFlow.Table объект в качестве параметра определения шага. Чтобы выяснить этот синтаксис, посмотрите на источник, созданный конструктором, для одного из файлов .feature, который использует синтаксис таблицы Gherkin, например.

Scenario: Testing something important 
    Given a Foo exists with the following attributes: 
     | Field | Name | 
     | Name | Foo | 
     | Fruit | Apple | 

Если это помогает, вы можете сохранить определения шага в своей собственной сборке.

+0

Это является возможным решением, но мой Селен проекты используют некоторые сложные узоры, так что не помогает мне. Мне нужно поддерживать текущий дизайн и добавлять к нему SpecFlow. Но это хорошее решение, спасибо. – Udiy

+0

Я понимаю. Возможно, вам будет лучше с двумя разными проектами. Когда вы создаете сценарий в SpecFlow, удалите избыточное покрытие в проекте Selenium. –

0

Вы можете использовать атрибуты ака крючками, как:

[BeforeTestRun] [AfterTestRun]

[BeforeFeature] [AfterFeature]

[BeforeScenario] или [Перед] [AfterScenario] или [После]

[BeforeScenarioBlock] [AfterScenarioBlock]

[BeforeStep] [AfterStep]

Для получения более подробной информации о крючках, идите here

+0

@udiy, любое обновление? –

+0

@udiy, дайте нам знать ваше обновление. –

Смежные вопросы