2015-06-11 4 views
1

Я только начал использовать поток Spec вместе с Selenium & N Unit. У меня есть основной вопрос, возможно, я знаю ответ на него, но хочу, чтобы это подтвердилось. Подумайте, есть 2 функции - Регистрация, Добавить новую транзакцию. 2 отдельных элемента с их соответствующими определениями шага. Как я могу совместно использовать элемент IWebDriver для обеих функций. Я не хочу снова запускать новый браузер. & добавьте транзакцию. Хотите выполнить как поток, так и поток. Мои мысли о том, что эта функция не допускается с использованием потока Spec, поскольку основное использование тестирования на основе функций нарушается как попытка запустить 2 функции в одном сеансе. Будет ли помощь в помощи контекстного инжектора в этом случае?Specflow, Selenium-Share данные между различными определениями шага или классами

+0

Я действительно ссылался на эту ссылку, но больше информации всегда оценили. http://stackoverflow.com/questions/2881685/in-specflow-how-can-i-share-data-between-steps-features – ReuseAutomator

+0

, если это просто для Webdriver, вы можете попробовать одиночный класс для доступа к одному экземпляру во всех шагов, независимо от особенностей. – Kavan

ответ

3

Что вы хотите сделать, это плохая идея. вы должны начать новый сеанс браузера для каждой функции, IMHO.

Нет гарантии, в каком порядке ваши тесты будут выполнены, это будет определено тестовым бегуном, так что вы можете получить Feature2 перед Feature1.

Фактически, ваши сценарии также должны быть независимыми.

Вы можете совместно использовать экземпляр webdriver между шагами, как в this answer, но вы должны использовать специальные функции, такие как сценарий Background, чтобы выполнить настройку или определенные шаги, которые выполняют настройки вашего комманда.

EDIT

У нас есть аналогичные проблемы с некоторыми из наших тестов, и это то, что мы делаем:

Мы создаем sceanrio для первого шага

Feature: thing 1 is done 

Scenario: Do step 1 
    Given we set things for step 1 up 
    When we execute step 1 
    Then some result of step one should be verified 

Тогда мы делаем один для шага 2 (который позволяет предположить, что он полагается на этап 1)

Feature: thing 2 is processed 

Scenario: Do step 2 
    Given we have done step 1 
    And we set things for step 2 up 
    When we execute step 2 
    Then some result of step 2 should be verified 

Это первый шаг Given we have done step 1

это шаг, который вызывает все шаги функции 1:

[Given("we have done step 1")] 
public void GivenWeHaveDoneStep1() 
{ 
    Given("we set things for step 1 up"); 
    When("we execute step 1"); 
    Then("some result of step one should be verified"); 
} 

Тогда, если мы шаг 3 мы делаем это:

Feature: thing 3 happens 

Scenario: Do step 3 
    Given we have done step 2 
    And we set things for step 3 up 
    When we execute step 3 
    Then some result of step 3 should be verified 

Снова Given we have done step 2 является композитный шаг, который вызывает все этапы сценария для этапа 2 (и, следовательно, все этапы этапа 1)

[Given("we have done step 2")] 
public void GivenWeHaveDoneStep2() 
{ 
    Given("we have done step 1"); 
    Given("we set things for step 2 up"); 
    When("we execute step 2"); 
    Then("some result of step 2 should be verified"); 
} 

Повторяем этот процесс, чтобы, когда мы переходим к шагу 5, он выполняет все шаги в правильном порядке. Иногда мы добираемся до шага 5, мы делаем @ignore предыдущие 4 шага, так как все они будут вызываться по шагу 5 в любом случае.

+0

@ Сэм-я понимаю, что вы имели в виду, функции запускаются в любом порядке выбора. Есть ли способ заставить это работать в порядке. Я планирую запустить поток дыма - набор из 5 функций в определенном порядке. Будет ли все тесты дыма в конкретной папке и запускать их путем нумерации. Я знаю ИМХО, это не отличная идея. – ReuseAutomator

+0

Я хочу запустить пятую функцию только после того, как 3,4 будет завершено. Но наблюдая за ними 5 до тех пор. – ReuseAutomator

+0

Пробовал использовать ваш код для обмена сеансами WebDriver между функциями в OrderedTest для MsTest, не работает. Любая идея? Она работает в NUnit. – ReuseAutomator

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