Specflow/Selenium 中的多项测试错误 运行

Error running multiple tests in Specflow/Selenium

我有一个现有项目使用 Specflow 和 SpecRun 运行 针对 Sauce Labs 进行一些测试。我有一个创建 RemoteWebDriverBeforeSenario 挂钩和一个关闭它的 AfterScenario 挂钩。

我现在将它移到另一个项目中(复制文件,只是更改了名称空间)并且第一次测试 运行 没问题,但随后出现以下错误:

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 中获取它的新实例,而是使用现在已处理的先前测试版本。

但我不明白为什么这在另一个项目中有效?

我正在使用 Github here

中的 Specflow 示例

更新

看来我已经找到问题了。在 Default.srprofile 中,testThreadCount 是 1,而工作解决方案中的值是 10。我现在已经更新它以匹配并且它有效。

不确定这个值应该是多少。我假设它不应该是相同数量的测试,但是我该如何解决我最初的共享驱动程序上下文问题?

TestThreadCount 指定 SpecFlow+Runner(又名 SpecRun)执行测试所使用的线程数。 每个线程都是分开的。默认为 AppDomain 隔离,因此每个线程都在单独的 AppDomain 中运行。

在 SauceLab 示例中有 7 个场景,运行器配置为使用 10 个线程。这意味着,每个场景都在具有自己的 AppDomain 的不同线程中执行。由于没有线程执行第二个场景,您不会在示例中得到此错误

只有一个线程,您的线程正在执行多个场景,您遇到了这个问题。

最简单的解决方法是,如果您从字段中删除静电。对于每个场景,您都会获得一个新的绑定实例 class。你不必记住它是静态的。

有关如何将 Selenium 与 SpecFlow 和 SpecFlow+ 结合使用的更好示例,请查看此处:https://github.com/techtalk/SpecFlow.Plus.Examples/tree/master/SeleniumWebTest

您必须调整 WebDriver- class 才能在 RemoteWebDriver 上使用 SauceLabs。