我正在将 SpecFlow 与 Selenium WebDriver 和 SpecRun一起
用作测试运行器来创建和执行自动化测试用例,并且正在寻找一种在测试执行报告中插入屏幕截图的解决方案。
我编写了一种在每个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);
}
}
我无法看到截图被捕获在cucumber的程度报告。 我已经调试并观察到代码已经执行,但屏幕截图并没有保存在extent report或html report文件中。 截图代码 if(scenario.isFailed()){byte[]screenshot=seleniumitls.captureShot();scenario.public void screenshot(scenario sce
我使用页面对象模式。我在Watcher类中实现了TestWatcher接口来处理测试用例结果。为了截屏通过/失败的测试用例,我需要一个WebDriver的实例,可用的驱动程序。如果我声明驱动程序为静态,那么它在顺序模式下工作良好,但在打开并行执行时失败。看起来JUnit对单个类中的所有测试方法都使用单线程。如果我不将驱动程序声明为静态,那么来自TestWatcher方法的ExecttionCont
我正在尝试使用extent report构建selenium,但无法使用save screenshot函数,因为我无法引用ITestListener类中的WebDriver对象。下面是我的示例代码: 测试转轮。java: TestListener.java公共类TestListener实现ITestListener{ 问题: > 如何将WebDriver对象从TestRunner.java传递给T
我看到有人为此发了一篇帖子,在用JAVA和Cucumber进行测试的每一步之后,如何捕捉屏幕截图? 但是,我想做的是能够在每一个动作之后,甚至在一个Cucumber步骤内,拍摄一个屏幕截图,并将其嵌入Cucumber报告中。换句话说,在一个步骤中有多个动作可以满足这个步骤,我想为所有动作嵌入屏幕截图。这可能吗?如果是,怎么做?
我在我的项目中使用cucumber版本4。我在我的项目中使用以下依赖项。 使用上述依赖关系,我能够生成“cucumberjvm报告”。 我还用java编写了代码,用于将屏幕截图附加到报告中,我只在场景失败时拍摄屏幕截图。 我不确定是否遗漏了什么,但屏幕截图没有附加到报告中。cucumber生成的默认html报告正在显示屏幕截图。 谁能帮我一下吗。谢谢
Cucumber Extent Reports在没有屏幕截图的情况下工作,但是当我想要在Extent report中使用屏幕截图时,我会得到以下例外。 为了制作cucumber范围报告,我只做了配置更改。。。没有代码更改。为了添加截图,我在下面添加了钩子来添加截图API。 波姆。xml: 跑步者代码: 在钩子中添加截图代码: 添加了最后一行- 我使用extent.properties文件和exte