我有一大套SpecFlow测试针对本地运行的selenium网格执行。网格具有为最多10个firefox实例配置的单个主机。测试是从NUnit串行运行的,所以我只希望一次只需要一个会话。
但是,当大约一半的测试用例运行时,来自集线器的控制台窗口报告输出开始报告
信息:节点主机[url]没有空闲插槽
为什么?
所有测试用例都与TearDown方法相关联,该方法关闭并处理WebDriver,尽管我还没有验证绝对每个测试都能在不失败的情况下获得此方法。我希望一次最多可以激活一个会话。我怎样才能找出阻止主持人回收这些会话的原因?
编辑#1:
我认为我已经缩小了问题的原因 - 这确实与不关闭WebDriver有关。在拆卸方法上有[AfterScenario]属性可用于执行此操作,但它们仅匹配方案的子集,因为它们具有参数。删除参数以便拆除与每个方案相关联会修复会话耗尽(或似乎),但有些测试需要重新获取现有会话,因此我必须单独修复它们。
一些背景知识:这个测试套件是作为“完整”的一部分继承的。解决方案,它保持不变,从未交付。我把它重新投入使用并且不得不在我去的时候发现它的怪癖 - 我没有写任何这些。我曾与Selenium和SpecFlow短暂相遇,但从未将两者结合使用。
答案 0 :(得分:2)
这个问题结果证明是一个表面级别的失败 - 主要是因为我没有发现它。一些日志记录代码试图写入不存在的文件,抛出的异常绕过WebDriver上的Dispose()
调用,然后被吞没而没有错误报告。因此会议闲逛。删除日志代码修复了会话耗尽。
答案 1 :(得分:1)
查看节点(远程桌面)并查看包装盒上发生的情况。听起来好像你的测试没有正确地关闭它的会话。