就拿黄瓜截图(Take a screenshot with Cucumber)

2019-08-31 20:42发布

我只是学习如何使用黄瓜。 你能告诉我如何完成这个代码?

您可以实现与这些片段未定义的步骤一步的定义:

Then /^I take a screenshot$/ do
    pending # express the regexp above with the code you wish you had
end

Answer 1:

当意想不到的事情发生在一般的屏幕快照拍摄。 您可能还需要捕捉的屏幕截图测试案例失败的报告。 在这种特殊情况下,你应该在截屏获取逻辑@After ,将每一个场景中执行的方法。 一个Java,硒版本,

@After("@browser")
public void tearDown(Scenario scenario) {
    if (scenario.isFailed()) {
            final byte[] screenshot = ((TakesScreenshot) driver)
                        .getScreenshotAs(OutputType.BYTES);
            scenario.embed(screenshot, "image/png"); //stick it in the report
    }
    driver.close();
}


Answer 2:

  1. 您可以使用罐装步骤(预先定义的)取屏幕截图。

     Then take picture 

有没有需要任何步骤定义。 黄瓜中还附带了许多其他预先定义的步骤。 请参阅其他罐头步骤

  1. 如果您仍然需要写步骤定义。

     Then /^I take a screenshot$/ do page.save_screenshot('image_name.png') end 


Answer 3:

我提供的情况时失败,这将拍摄快照的代码,我希望你可以根据你的用途修改,如果你不能在这里这样做评论。 此代码与Ubuntu系统红宝石

#Create a directory for storing snapshot
dir_path = "/home/vchouhan/vijay_work/snapshot"
unless Dir.exist?(dir_path)
    Dir.mkdir(dir_path,0777)
    puts "=========Directory is created at #{dir_path}"
else
    puts "=========Directory is exist at #{dir_path}"
end

#Run after each scenario
After do |scenario|
  #Check, scenario is failed?
  if(scenario.failed?)
         time = Time.now.strftime('%Y_%m_%d_%Y_%H_%M_%S_')
         name_of_scenario = time + scenario.name.gsub(/\s+/, "_").gsub("/","_")
         puts "Name of snapshot is #{name_of_scenario}"
         file_path = File.expand_path(dir_path)+'/'+name_of_scenario +'.png'
         page.driver.browser.save_screenshot file_path
         puts "Snapshot is taken"
    puts "#===========================================================#"
    puts "Scenario:: #{scenario.name}"
    puts "#===========================================================#"
  end
end


Answer 4:

在Java中,你可以实现这一步,像这样,

@Then("^I take a screenshot$")
public void i_take_a_screenshot()
{
  // Your code goes here
}


Answer 5:

如果您使用的Watir-的webdriver为您的测试,你可以打电话给你的浏览器对象的截图方法和保存。 http://watirwebdriver.com/screenshots/

如果你正在做的Windows控件,你可以使用Win32 /截图宝石来实现这一目标。 https://github.com/jarmo/win32screenshot



Answer 6:

一种改进版本以前的答案的。 这有错误处理,写出在故障点的URL。 认为它可能是有用的。

@After("@UI" )
public void embedScreenshotOnFail(Scenario s) {
    if (s.isFailed()) {
        try {
            byte[] screenshot = ((TakesScreenshot) getDefaultDriver()).getScreenshotAs(OutputType.BYTES);
            s.embed(screenshot, "image/png" );
            s.write("URL at failure: " + getDefaultDriver().getCurrentUrl());
        } catch (WebDriverException wde) {
            s.write("Embed Failed " + wde.getMessage());
        } catch (ClassCastException cce) {
            cce.printStackTrace();
        }
    }
}


文章来源: Take a screenshot with Cucumber