簡體   English   中英

如何使用 hound/elixir 截取失敗的屏幕截圖

[英]How to take a screenshot on failure using hound/elixir

我正在嘗試使用 take_screenshot() (Hound) 截取屏幕截圖。 我只需要捕獲失敗的屏幕截圖。

我嘗試過嘗試/救援,但是即使斷言失敗,救援塊也總是執行。

try do
   // some page elements action
   assert visible_page_text(), "Hello World"
rescue
  _ -> take_screenshot()
end

我也試過,

try do
   // some page elements action
   assert visible_page_text(), "Hello World"
catch
  _ -> take_screenshot()
end

我想,如果斷言失敗,那么它應該截圖。

稍作修改,您的代碼就可以工作:

try do
   // some page elements action
   assert visible_page_text() =~ "Hello World"
catch
  error ->
    take_screenshot()
    raise error
end

或者把它變成一個宏:

  # assert screenshot on failure
  defmacro assert_sof(assertion) do
    quote do
      try do
        assert unquote(assertion)
      rescue
        error ->
          take_screenshot()
          raise error
      end
    end
  end

並這樣稱呼它:

assert_sof visible_page_text() =~ "Hello World"

更新:正如您所提到的,這只會在進行斷言時截取屏幕截圖。 不過這可以解決。

這是一個宏,它將整個測試的內容包裝在 try/rescue 塊中,並保存任何錯誤的屏幕截圖。 作為獎勵,它會在屏幕截圖前面加上測試名稱。 最大的缺點是您丟失了 stracktrace,因此更難查明測試代碼的失敗行。 (用catch而不是rescue解決)把宏放在support/conn_case.ex或者你喜歡的其他地方:

def MyAppWeb.ConnCase
  # ...

  # Test and take screenshot on failure. Only works for hound tests.
  defmacro test_sof(message, var \\ quote do _ end, contents) do
    prefix = String.replace(message, ~r/\W+/, "-")
    filename = Hound.Utils.temp_file_path(prefix, "png")

    quote do
      test unquote(message), unquote(var) do
        try do
          unquote(contents)
        catch
          error ->
            take_screenshot(unquote(filename))
            raise error
        end
      end
    end
  end

  using do
    quote do
      # Import conveniences for testing with connections
      use Phoenix.ConnTest
      import MyAppWeb.ConnCase, only: [test_sof: 2, test_sof: 3] # <- Add this line
      # ...
    end
  end

  # ...
end

並將其稱為正常測試:

test_sof "form with valid data" do
  navigate_to "/form"
  click({:id, "test"})
  assert visible_page_text() =~ "test successful"
end

現在它應該適用於各種錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM