2016-10-10 11 views
0

У меня есть существующий проект, который использует Specflow и SpecRun для запуска некоторых тестов против Sauce Labs. У меня есть крючок BeforeSenario, который создает RemoteWebDriver и крючок AfterScenario, который закрывает это.Ошибка при выполнении нескольких тестов в Specflow/Selenium

Я теперь переехал это в другой проект (скопированы файлы поверх, просто изменил пространство имен) и первый тест работает нормально, но получаю следующее сообщение об ошибке:

An exception of type 'OpenQA.Selenium.WebDriverException' occurred in WebDriver.dll but was not handled in user code

Additional information: Unexpected error. The command you just sent (POST element) has no session ID.

This is generally caused by testing frameworks trying to run commands after the conclusion of a test.

For example, you may be trying to capture a screenshot or retrieve server logs after selenium.stop() or driver.quit() was called in a tearDown method. Please make sure this process happens before the session is ended.

Я сравнил проект и он использует ту же версию SpecFlow, такую ​​же .Net-версию. Я не вижу никакой разницы между этими двумя проектами.

В моих шагах у меня есть следующие строки:

public static IWebDriver driver = (IWebDriver)ScenarioContext.Current["driver"];

, который я думаю, что это вопрос, как вместо того, чтобы получить новый экземпляр этого из ScenarioContext он использует версию предыдущего теста, который в настоящее время расположены.

Но я не понимаю, почему это работает в другом проекте?

Я использую пример Specflow в Github here

UPDATE

Похоже, я нашел проблему. В файле Default.srprofile testThreadCount был равен 1, тогда как значение в рабочем решении было 10. Я обновил это, чтобы оно соответствовало, и оно работает.

Не уверен, что это за значение должно быть. Я предполагаю, что это не должно быть одинаковое количество тестов, но как же мне обойти исходную проблему контекста совместного драйвера?

ответ

1

TestThreadCount определяет количество потоков, используемых SpecFlow + Runner (aka SpecRun) для выполнения тестов. Каждая из нитей разделена. По умолчанию используется изоляция AppDomain, поэтому каждый поток запускается в отдельном AppDomain.

В примере SauceLab имеется 7 сценариев, а бегун настроен на использование 10 потоков. Это означает, что каждый сценарий выполняется в другом потоке с собственным AppDomain. Поскольку ни один поток не выполняет второй сценарий, вы получаете эту ошибку не в примере

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

Самое простое исправление было бы, если вы удалите статику из поля. Для каждого сценария вы получаете новый экземпляр класса привязки. Вам не нужно помнить об этом статично.

Для лучшего примера, как использовать Selenium с SpecFlow & SpecFlow + посмотрите здесь: https://github.com/techtalk/SpecFlow.Plus.Examples/tree/master/SeleniumWebTest

Вы должны настроить WebDriver- класс для использования SauceLabs над RemoteWebDriver.

+0

Спасибо за эту ссылку, которая решила мою другую проблему о том, как делать тесты Specflow против нескольких браузеров! В Sauce Labs у меня может быть два параллельных теста, означает ли это, что я должен установить testThreadCount равным 2? Что мне делать со статическим полем? – ADringer

+0

Да, установите его на 2 и просто удалите статику из поля. –

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

  • Нет связанных вопросов^_^