【问题标题】:Using Allure to capture a screenshot on fail使用 Allure 捕获失败的屏幕截图
【发布时间】:2015-03-15 08:47:13
【问题描述】:

我一直在玩 Allure 框架,我认为如果发生任何错误/失败(基本上是任何不合格的事情),我想捕获一个屏幕截图。

我正在使用 Java/Junit/Maven。

我已经看到有多种使用@Rule 的方法来执行此操作,但不确定这是否会将屏幕截图保存在报告中。

我原以为会有一个测试用例状态或者我可以在拆解过程中检查的东西,但找不到任何东西。

有人有什么想法吗?

【问题讨论】:

    标签: java maven junit webpage-screenshot allure


    【解决方案1】:

    JUnit 规定它是在失败时保存屏幕截图的默认方式。一个例子:

    @Rule
    public TestWatcher screenshotOnFailure = new TestWatcher() {
        @Override
        protected void failed(Throwable e, Description description) {
            makeScreenshotOnFailure();
        }
    
        @Attachment("Screenshot on failure")
        public byte[] makeScreenshotOnFailure() {
            return ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
        }
    };
    

    【讨论】:

    • 我回来后会试一试 - 它肯定比我通过 google 找到的其他示例简单得多。
    • 非常感谢您的帮助 - 但是我在 Override 之后的行中收到以下错误:“new TestWatcher(){} 类型的方法失败(Throwable,Description)必须覆盖或实现一个超类型方法” - 我不知道为什么。另外,我是不是有点厚,但我没有被要求导入 Override(或者这是否来自 Rule 导入?)
    • 好的,错误是我有一个未删除的现有导入并且它发生冲突。但是,没有生成屏幕截图,因为在 @After 代码块(我用来杀死活动浏览器)之后似乎调用了这个失败 - 这是我的错误还是我忘了添加一些东西?
    • 是的,JUnit 在@After 方法之后执行规则,所以你可以使用TestWatcher 中的finished 方法来杀死浏览器
    • 这是否意味着必须从我现有的 @After 方法中删除所有 brower.close() ?或者我可以在后面添加一些逻辑(如果没有错误,关闭浏览器,否则保持活动状态)?
    猜你喜欢
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 2014-05-31
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多