【发布时间】:2018-02-13 11:15:49
【问题描述】:
在对 selenium 网格运行测试时尝试截屏时遇到一个奇怪的问题
public void TakeScreenshot(object methodName)
{
try
{
Screenshot ss = ((ITakesScreenshot)_driver).GetScreenshot();
var filePath = AppDomain.CurrentDomain.BaseDirectory + "\\..\\..\\Screenshots\\" + methodName + ".png";
ss.SaveAsFile(filePath);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
throw;
}
}
我有以下方法来截屏,但是当它在网格上运行时,即使测试通过了,我也会遇到以下故障。
System.InvalidOperationException : 会话 [(null externalkey)] 不可用且不在最后 1000 个终止会话中。
当我在本地运行它时,我得到以下内容
OpenQA.Selenium.WebDriverException : 向远程 WebDriver 服务器发送 HTTP 请求以获取 URL http://localhost:54408/session//screenshot,引发了具有空响应的异常。异常状态为ConnectFailure,消息为:无法连接远程服务器
但是,对于这两种环境,我都得到了屏幕截图,但这未通过测试。 有谁知道在 C# 中为 selenium 截屏的最佳方法?
更新 - 我发现这似乎只发生在测试完成后,我将完全相同的代码放在 [BeforeScenario] 中并且它没有出错,所以它发生在测试结束时。 .
【问题讨论】:
-
您似乎正在尝试截取驱动程序退出时发生的异常情况。会话结束后,您将无法截取屏幕截图。
-
@FlorentB。感谢您的评论,是的,似乎 AfterScenario 被多次调用,这就是为什么即使屏幕截图在 driver.quit 上方,截图也会失败。所以我注释掉了 driver.quit 并在屏幕截图中添加了一个数字随机器并运行测试,发现它需要 11 个屏幕截图!这似乎表明这被调用了 11 次!!!
标签: c# selenium screenshot selenium-grid