用Cucumber截取屏幕截图

时间:2013-04-23 03:03:42

标签: cucumber cucumber-jvm cucumber-junit cucumber-cpp

我只是学习如何使用黄瓜。 你能告诉我如何填写这段代码吗?

您可以使用以下代码段实现未定义步骤的步骤定义:

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

6 个答案:

答案 0 :(得分:5)

通常会在出现意外情况时拍摄屏幕截图。您可能还想捕获屏幕截图,以便在测试用例失败时进行报告。在这种特殊情况下,您应该在@After方法中使用截屏捕获逻辑,该方法将针对每个方案执行。 Java,selenium版本,

@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();
}

答案 1 :(得分:4)

  1. 您可以使用固定步骤(预定义)来截取屏幕截图。

    <a id="connectLink" href="#">Connect To Trello</a>
    
  2. 不需要任何步骤定义。黄瓜还带有许多其他预定步骤。请参阅其他canned steps

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

      $ip = `ifconfig en1 inet | grep inet | awk '{print $2}'`
      

答案 2 :(得分:2)

我提供的代码将在场景失败时拍摄快照,我希望您可以根据您的用途进行修改,如果您不能这样做,请在此处评论。这段代码与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

答案 3 :(得分:0)

在Java中,您可以像这样实现此步骤,

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

答案 4 :(得分:0)

如果您使用watir-webdriver进行测试,可以在浏览器对象上调用屏幕截图方法并保存。 http://watirwebdriver.com/screenshots/

如果您正在使用Windows控件,您可以使用win32 / screenshot gem来实现此目的。https://github.com/jarmo/win32screenshot

答案 5 :(得分:0)

上一个答案的改进版本。这有错误处理,在失败点写出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();
        }
    }
}