使用Scalatest进行每次失败的屏幕截图

时间:2016-09-01 07:53:54

标签: scala screenshot scalatest

我想使用ScalaTest在规范或套件中对每个失败测试进行屏幕截图。 Scala测试网站显示了如何截取每个可能失败的代码的屏幕截图:

withScreenshot {
   drive.findElement(By.id("login")).getAttribute("value") should be ("Login")
}

this post试图解释,但我无法理解究竟应该做些什么。 我也找到了类ScreenshotOnFailure.scala,但是一旦它是私有的并且有包限制就无法使用它。

有人能告诉我是否有办法拦截任何失败,然后截取屏幕截图?

1 个答案:

答案 0 :(得分:1)

只是为了得到最终答案,我正在根据问题中提到的this post方法编写解决问题的方法。

简而言之,解决方案就像这样(伪代码)。

trait Screenshots extends FunSpec {
   ...

   override def withFixture(test: NoArgTest): Outcome = {
      val outcome = test()

      // If the test fails, it will hold an exception.
      // You can get the message with outcome.asInstanceOf[Failure].exception
      if (outcome.isExceptional) {
         // Implement Selenium code to save the image using a random name
         // Check: https://stackoverflow.com/questions/3422262/take-a-screenshot-with-selenium-webdriver
      }
      outcome
   }
}

class MySpec extends Screenshots {
   ...

   describe("Scenario A") {
      describe("when this") {
         it("the field must have value 'A'") {
            // It will save a screenshot either if the selector is wrong or the assertion fails
            driver.findElement(By.id("elementA")).getAttribute("value") should be ("A")
         }
      }
   }
}

从现在开始,所有扩展屏幕特征的规范都会拦截错误并保存屏幕截图。

只是为了补充,问题中提到的带有withScreenshot()的周围区域仅保存断言失败,但是当测试因未找到元素而失败时(例如错误的选择器),它不会保存屏幕截图。

使用上面的代码,所有失败都会保存屏幕截图。