我正在使用带有Selenium WebDriver和SpecRun作为测试运行程序的SpecFlow来创建和执行自动化测试用例,并且我正在寻找一种解决方案来在测试执行报告中插入屏幕截图。
我写了一个方法来在每个Assert
函数之后创建屏幕截图。图像被保存到特定位置,但是当我进行结果分析时,我必须同时关注报告和图像。将它们放在同一个位置会很好(准确地在报告 html 中)。
有什么方法可以执行此操作(类似于控制台输出)?
我正在使用带有Selenium WebDriver和SpecRun作为测试运行程序的SpecFlow来创建和执行自动化测试用例,并且我正在寻找一种解决方案来在测试执行报告中插入屏幕截图。
我写了一个方法来在每个Assert
函数之后创建屏幕截图。图像被保存到特定位置,但是当我进行结果分析时,我必须同时关注报告和图像。将它们放在同一个位置会很好(准确地在报告 html 中)。
有什么方法可以执行此操作(类似于控制台输出)?
(转自https://groups.google.com/forum/#!topic/specrun/8-G0TgOBUbY)
是的,这是可能的。您必须执行以下步骤:
在报告生成期间,SpecRun 扫描测试输出以查找此类文件 URL,并将它们转换为具有相对路径的锚标记,以便无论您在何处分发报告文件(只要图像在其旁边),这些标记都将起作用。当然,您也可以将图像添加到子文件夹中。
这是与 Selenium WebDriver 一起使用的代码片段。这也将 HTML 源代码与屏幕截图一起保存。
[AfterScenario]
public void AfterWebTest()
{
if (ScenarioContext.Current.TestError != null)
{
TakeScreenshot(cachedWebDriver);
}
}
private void TakeScreenshot(IWebDriver driver)
{
try
{
string fileNameBase = string.Format("error_{0}_{1}_{2}",
FeatureContext.Current.FeatureInfo.Title.ToIdentifier(),
ScenarioContext.Current.ScenarioInfo.Title.ToIdentifier(),
DateTime.Now.ToString("yyyyMMdd_HHmmss"));
var artifactDirectory = Path.Combine(Directory.GetCurrentDirectory(), "testresults");
if (!Directory.Exists(artifactDirectory))
Directory.CreateDirectory(artifactDirectory);
string pageSource = driver.PageSource;
string sourceFilePath = Path.Combine(artifactDirectory, fileNameBase + "_source.html");
File.WriteAllText(sourceFilePath, pageSource, Encoding.UTF8);
Console.WriteLine("Page source: {0}", new Uri(sourceFilePath));
ITakesScreenshot takesScreenshot = driver as ITakesScreenshot;
if (takesScreenshot != null)
{
var screenshot = takesScreenshot.GetScreenshot();
string screenshotFilePath = Path.Combine(artifactDirectory, fileNameBase + "_screenshot.png");
screenshot.SaveAsFile(screenshotFilePath, ImageFormat.Png);
Console.WriteLine("Screenshot: {0}", new Uri(screenshotFilePath));
}
}
catch(Exception ex)
{
Console.WriteLine("Error while taking screenshot: {0}", ex);
}
}
尽管这篇文章已有 3 年的历史,但它确实对我有所帮助,而且我发现了如何将图像直接嵌入 HTML 报告中,而不是仅仅显示为链接,从而无需从报告中一一打开图像。
我认为这对其他人也有用。这是通过更新默认报告模板来完成的。请参阅教程:-自定义-报告中的“包括屏幕截图”部分。我也遵循同样的方法,但几乎没有问题。我通过将报告模板中的行修复为
<pre class="log">@Raw(FormatTechMessages(traceEvent.TechMessages.TrimEnd()).Replace("SCREENSHOT[ <a href=","<img width=100% src=").Replace("</a> ]SCREENSHOT", "</img>"))</pre>
我已将图像的宽度更新为 100%,因为这将适合单元格内的图像。
希望这会有所帮助。
我今天遇到完全相同的问题
使用带有“[”符号的屏幕截图方法正在破坏模板,另外我必须分别使用'和“才能使模板工作,在我的情况下,最终的模板代码看起来:
<pre class="log">@Raw(FormatTechMessages(traceEvent.TechMessages.TrimEnd()).Replace("SCREENSHOTXX", "<img width=50% src='").Replace("XXSCREENSHOT", "'>"))</pre>
和类中的代码:
Console.WriteLine($"SCREENSHOTXX {tempFileName} XXSCREENSHOT");