温馨提示:本文翻译自stackoverflow.com,查看原文请点击:ruby - Cucumber : I want to send report on email after my all the scenario get executed, Is there any metho
cucumber ruby watir

ruby - Cucumber :我想在所有方案执行后通过电子邮件发送报告,有什么方法吗

发布于 2020-04-20 16:50:34

我已创建邮件功能来发送报告

class Email
  include PageObject
  require 'mail'

  def mailsender
      Mail.defaults do
        delivery_method :smtp,{ 
          address: "smtp.gmail.com",
          openssl_verify_mode: "none",
          port: 587,
          domain: 'gmail.com',
          user_name: 'xxxxxxxx@gmail.com' ,
          password: '*******' ,
          authentication: 'plain'
        }
      end

      Mail.deliver do
        from     'xxxxxxx.com'
        to       'xxxxx@test.com'
        subject  'Execution report'
        body     'PFA'
        add_file 'Automation_report.html'
      end
  end
end

我希望此功能将在所有方案都执行后执行。

这是我的钩子文件

# frozen_string_literal: true

require watir

Before do |scenario|
  DataMagic.load_for_scenario(scenario)
  @browser = Watir::Browser.new :chrome
  @browser.driver.manage.window.maximize
end

After do |scenario|
  if scenario.failed?
    screenshot = "./screenshot.png"
    @browser.driver.save_screenshot(screenshot)
    embed(screenshot, "image/png",)
  end
  @browser.close
end

如果我在After After中使用此功能,则每次执行每种方案后它都会每次发送电子邮件

查看更多

提问者
Akshay
被浏览
35
supputuri 2020-02-05 22:17

您可以at_exit在hooks.rb文件中使用。

at_exit do
   # your email logic goes here
end

附加说明:After hook将在每个方案之后执行,这就是在每个方案执行之后它将发送电子邮件的原因。另一方面,at_exit仅在执行所有方案之后,钩子才会执行。

您可以直接在at_exit挂钩中实现电子邮件逻辑如果您要调用mailsender方法并且无法在at_exit挂钩中访问它,则可以如下所示创建电子邮件类/模块。

考虑您在GenericModules下具有Email模块

module GenericModules
  module Email
     def mailsender
         # implement your logic here
     end
  end
end

然后将电子邮件模块添加到world中的env.rb,如下所示。

World(GenericModules::Email)

现在,即使在at_exit钩子中,您也应该能够访问该方法