우리는 각 단계마다 스크린 샷을 찍으려고합니다.Specflow에서 현재 실행 단계 정보를 얻는 방법
모두 정상적으로 작동합니다. 그러나 스크린 샷을 생성 한 단계에 스크린 샷을 연결할 수는 없습니다.
우리가 원하는 것은 FeatureContext.FeatureInfo
과 ScenarioContext.ScenarioInfo
입니다. 그러나 개별 단계 수준. 그에 따라 스크린 샷에 태그를 지정할 수 있습니다.
우리는 각 단계마다 스크린 샷을 찍으려고합니다.Specflow에서 현재 실행 단계 정보를 얻는 방법
모두 정상적으로 작동합니다. 그러나 스크린 샷을 생성 한 단계에 스크린 샷을 연결할 수는 없습니다.
우리가 원하는 것은 FeatureContext.FeatureInfo
과 ScenarioContext.ScenarioInfo
입니다. 그러나 개별 단계 수준. 그에 따라 스크린 샷에 태그를 지정할 수 있습니다.
EDIT 노출이 추가되었습니다
클래스 : 당신이 원하는 무엇을 제공해야
ScenarioStepContext.StepInfo.Text
및
ScenarioStepContext.StepInfo.StepDefinitionType
.
원래 대답 난 그냥 (어제)이 있지만이 현재 가능하지 않다가이 기능을 추가하는 pull request를 제출했다. specflow를 직접 작성하면 my fork of the specflow repo을 복제하고 ScenarioStepContext
브랜치로 전환 한 다음 TechTalk.Specflow_VS2013.sln
을 열고 직접 프로젝트를 빌드하십시오.
먼저 specflow에 nuget 패키지의 새 버전 번호를 제공해야합니다. SpecFlow.nuspec
파일을 열고 버전을 내가 현재 버전 (1.9.3.4를 사용)보다 높은 버전으로 편집 한 다음 솔루션을 빌드하십시오 (VS2013 SDK를 설치해야하며 해당 버전을 빌드하려면 다른 VS SDK를 설치해야합니다). 솔루션이 구축되면
, 당신은
\SpecFlow\IdeIntegration\Vs2013Integration\bin\Debug\TechTalk.SpecFlow.Vs2013Integration.vsix
에서 VSIX를 설치 한 다음
\SpecFlow\Installer\NuGetPackages\bin\SpecFlow.1.9.3.4.nupkg
에서 nuget 패키지를 추가해야합니다.
이 작업을 완료하면 ScenarioStepContext.StepInfo.Text
및 ScenarioStepContext.StepInfo.StepDefinitionType
에 액세스하여 원하는 요소에 현재 단계 세부 정보를 태그 할 수 있습니다.
우리는 현재 이것을 사용하고 있지만, 주요 Specflow github 페이지에서 PR에 관한 문제를 제기하십시오. 가능한 경우 문제를 해결해 드리겠습니다. 이는 일을 데
<specFlow>
<trace listener="MyNameSpace.LogTraceListener, MyAssemblyName" />
<unitTestProvider name="NUnit" />
</specFlow>
:
public class LogTraceListener : ITraceListener
{
static public string LastGherkinMessage;
public void WriteTestOutput(string message)
{
LastGherkinMessage = message;
Console.WriteLine(message);
}
public void WriteToolOutput(string message)
{
Console.WriteLine(message);
}
}
이의 app.config에 SpecFlow 섹션에 등록해야합니다 : 자신의 LogTraceListener 구현
는현재 단계 정의를 얻을 수 있습니다 LastGherkinMessage
속성에는 방금 입력 한 단계 정의의 텍스트가 포함됩니다. 단계 정의 내에서 또는 다른 곳에서 액세스 할 수 있습니다.
나는 파티에 조금 늦었어요,하지만이 방법은 현재 실행중인 단계의 텍스트가 포함 된 문자열을 반환합니다 게시물 가스파르 나기에서 촬영
이private static string GetCurrentPositionText()
{
int currentPositionText = 0;
try
{
var frames = new StackTrace(true).GetFrames();
if (frames != null)
{
var featureFileFrame = frames.FirstOrDefault(f =>
f.GetFileName() != null &&
f.GetFileName().EndsWith(".feature"));
if (featureFileFrame != null)
{
var lines = File.ReadAllLines(featureFileFrame.GetFileName());
const int frameSize = 20;
int currentLine = featureFileFrame.GetFileLineNumber() - 1;
int minLine = Math.Max(0, currentLine - frameSize);
int maxLine = Math.Min(lines.Length - 1, currentLine + frameSize);
for (int lineNo = currentLine - 1; lineNo >= minLine; lineNo--)
{
if (lines[lineNo].TrimStart().StartsWith("Scenario:"))
{
minLine = lineNo + 1;
break;
}
}
for (int lineNo = currentLine + 1; lineNo <= maxLine; lineNo++)
{
if (lines[lineNo].TrimStart().StartsWith("Scenario:"))
{
maxLine = lineNo - 1;
break;
}
}
for (int lineNo = minLine; lineNo <= maxLine; lineNo++)
{
if (lineNo == currentLine)
{
currentPositionText = lineNo - minLine;
return String.Format("->" + lines[lineNo]);
}
}
}
}
}
catch (Exception ex)
{
Debug.WriteLine(ex, "GetCurrentPositionText");
}
return String.Format("(Unable to detect current step)");
}
때 비슷한 질문 몇 시간 전에 제작을 현재 단계의 문자열 만 반환하도록 약간 수정되었습니다.
이것은 정말 도움이되었습니다. 또한 테이블 값을 쉽게 노출하는 방법을 보여주었습니다. – Festivejelly