我有一大套 SpecFlow 测试针对本地运行的 selenium 网格执行。网格有一个配置为最多 10 个 firefox 实例的主机。测试是从 NUnit 串行运行的,所以我希望一次只需要一个 session 。
然而,当大约一半的测试用例已经运行时,来自中心的控制台窗口报告输出开始报告
INFO: Node host [url] has no free slots
为什么?
所有的测试用例都与关闭和处理 WebDriver 的 TearDown 方法相关联,尽管我还没有验证绝对每个测试都可以在没有失败的情况下使用这个方法。我希望一次最多有一个 session 处于事件状态。如何找出阻止主机回收这些 session 的原因?
编辑 #1:
我想我已经缩小了问题的原因 - 这确实与没有关闭 WebDriver 有关。用于执行此操作的拆卸方法有 [AfterScenario] 属性,但它们仅匹配场景的子集,因为它们具有参数。删除参数以便拆卸与每个场景相关联修复 session 耗尽(或似乎)但有一些测试希望重新获取现有 session ,因此我必须单独修复它们。
一点背景:这个测试套件是作为“完整”解决方案的一部分继承的,自交付以来一直保持原样,从未运行过。我正在将它重新投入使用,并且不得不在我前进的过程中发现它的怪癖 - 我没有写任何这些。我曾短暂接触过 Selenium 和 SpecFlow,但从未将两者一起使用。
最佳答案
结果证明该问题是面部护理级别的失败 - 主要是因为我没有发现它。一些日志代码试图写入一个不存在的文件,抛出的异常绕过了对 Dispose()
的调用。在 WebDriver 上,然后被吞并没有错误报告。因此, session 悬而未决。删除日志代码修复了 session 耗尽问题。
关于Selenium 网格用完可用插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24264840/