Selenium Grid上的C#屏幕截图

时间:2018-02-13 11:15:50

标签: c# selenium screenshot selenium-grid

在针对硒网格运行测试时尝试截屏时我遇到了一个奇怪的问题

 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:抛出了一个带有空响应的异常,向URL http://localhost:54408/session//screenshot的远程WebDriver服务器发送HTTP请求。异常的状态是ConnectFailure,消息是:无法连接到远程服务器

但是,对于这两种环境,我都会获得屏幕截图,但这是测试失败的原因。 有没有人知道在C#中为selenium截取屏幕截图的最佳方法?

更新 - 我发现这似乎只是在测试完成后才发生,我在[BeforeScenario]中放置了完全相同的代码并且它没有错误所以它在测试结束时发生的事情...

1 个答案:

答案 0 :(得分:0)

由于评论,我发现了为什么会这样。

我得到错误的原因是没有驱动程序,没有驱动程序的原因是由于[AfterScenario]被多次调用所以第二次运行时没有驱动程序,因此屏幕截图不能被采取。

我的后场景被多次调用的原因是因为它是我创建的基类,它是由每个步骤类继承的。

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