Take a screenshot with Cucumber

后端 未结 6 804
伪装坚强ぢ
伪装坚强ぢ 2021-01-03 17:31

I just learn how to use cucumber. Can you tell me how to complete this code?

You can implement step definitions for undefined steps with these snippets:



        
相关标签:
6条回答
  • 2021-01-03 17:44
    1. You can use canned steps (pre-defined) to take screenshot.

      Then take picture
      

    There is not need for any step definition. Cucumber also comes with many other pre-defined steps. See other canned steps

    1. If you still need to write step definition.

      Then /^I take a screenshot$/ do
        page.save_screenshot('image_name.png')
      end
      
    0 讨论(0)
  • 2021-01-03 17:51

    In Java you can implement this step like so,

    @Then("^I take a screenshot$")
    public void i_take_a_screenshot()
    {
      // Your code goes here
    }
    
    0 讨论(0)
  • 2021-01-03 17:53

    Screenshots in general are taken when something unexpected occurs. You may also want to capture a screenshot to report when a test case fails. In this particular case, you should have screenshot capture logic in an @After method that will be executed for every scenario. A Java, selenium version,

    @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();
    }
    
    0 讨论(0)
  • 2021-01-03 18:01

    An improved version of the previous answer. This has error handling, writing out the URL at the failure point. Thought it might be useful.

    @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();
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-03 18:05

    I am providing the code which will take the snapshot when scenario is failed, I hope you can modify according to your uses, Comment here if you can't do that. This code is in ruby with Ubuntu system

    #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
    
    0 讨论(0)
  • 2021-01-03 18:10

    If you are using watir-webdriver for your testing you can call the screenshot method on your browser object and save it. http://watirwebdriver.com/screenshots/

    If you are doing windows controls you could use the win32/screenshot gem to achieve this.https://github.com/jarmo/win32screenshot

    0 讨论(0)
提交回复
热议问题