【问题标题】:Error running multiple tests in Specflow/Selenium在 Specflow/Selenium 中运行多个测试时出错
【发布时间】:2016-10-10 20:54:33
【问题描述】:

我有一个现有项目,它使用 Specflow 和 SpecRun 对 Sauce Labs 运行一些测试。我有一个 BeforeSenario 钩子创建一个 RemoteWebDriver 和一个 AfterScenario 钩子来关闭它。

我现在已经将它移到另一个项目中(复制文件,只是更改了命名空间),第一个测试运行良好,但随后出现以下错误:

WebDriver.dll 中出现“OpenQA.Selenium.WebDriverException”类型的异常,但未在用户代码中处理

附加信息:意外错误。您刚刚发送的命令(POST 元素)没有会话 ID。

这通常是由于测试框架在测试结束后试图运行命令造成的。

例如,您可能正在尝试捕获屏幕截图或检索服务器日志 在一个 tearDown 方法中调用 selenium.stop() 或 driver.quit() 之后。 请确保此过程在会话结束之前发生。

我比较了这个项目,它使用相同版本的 SpecFlow,相同的 .Net 版本。我看不出这两个项目有什么区别。

在我的步骤中,我有以下行:

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

我认为这是问题所在,因为它没有从 ScenarioContext 获取它的新实例,而是使用了以前的测试版本,该版本现已被处置。

但我不明白为什么这在另一个项目中起作用?

我正在使用 Github 中的 Specflow 示例 here

更新

看来我找到了问题所在。在 Default.srprofile 中,testThreadCount 为 1,而工作解决方案中的值为 10。我现在已将其更新为匹配并且可以正常工作。

不知道这个值应该是多少。我认为它不应该是相同数量的测试,但是我该如何解决共享驱动程序上下文的原始问题?

【问题讨论】:

    标签: selenium specflow saucelabs


    【解决方案1】:

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

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

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

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

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

    您必须调整 WebDriver- 类以便在 RemoteWebDriver 上使用 SauceLabs。

    【讨论】:

    • 感谢该链接,它解决了我关于如何针对多个浏览器进行 Specflow 测试的其他问题!在 Sauce Labs 中我可以同时进行两个测试,这是否意味着我应该将 testThreadCount 设置为 2?静态字段该怎么办?
    • 是的,将其设置为 2 并简单地从字段中删除静态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 2019-11-10
    • 2011-03-20
    相关资源
    最近更新 更多