【问题标题】:Screenshot in C# on Selenium GridSelenium Grid 上的 C# 屏幕截图
【发布时间】: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


【解决方案1】:

感谢 cmets,我发现了为什么会发生这种情况。

我收到该错误的原因是没有驱动程序,没有驱动程序的原因是由于 [AfterScenario] 被多次调用,因此第二次运行时没有驱动程序,因此屏幕截图无法被带走。

我的 after 场景被多次调用的原因是因为它位于我创建的基类中,该基类被每个 step 类继承。

一旦我创建了一个新类并将之后/之前的场景移到它自己的单独类中,那么我的之后场景只被调用一次并且错误消失了。

【讨论】:

    猜你喜欢
    • 2011-10-13
    • 2016-02-12
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    相关资源
    最近更新 更多