2013-04-23 787 views
1

我剛學會如何使用黃瓜。 你能告訴我如何完成這段代碼嗎?以黃瓜爲屏幕截圖

可以實現對不確定的步驟一步定義這些片段:

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

給你使用哪種語言的詳細信息...? – Aravin 2015-11-25 07:36:58

回答

0

在Java中,你可以實現這一步,像這樣,

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

我不認爲這是一個好主意,因爲它似乎引入了一個合成步驟,僅用於與正在測試的業務場景無關的截圖。最好使用Cucumber鉤子,這樣可以決定在執行每個步驟後截圖。 – 2017-03-24 08:44:59

5

在出現意外情況時會採取一般屏幕截圖。您可能還需要捕獲屏幕截圖來報告測試用例何時失敗。在這種情況下,您應該在每個場景都會執行的@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(); 
} 
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 
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(); 
     } 
    } 
} 
4
  1. 您可以使用罐裝步驟(預先定義的)取屏幕截圖。

    Then take picture 
    

沒有需要任何步驟定義。黃瓜還帶有許多其他預定義的步驟。參見其他canned steps

  1. 如果仍然需要編寫步驟定義。

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

我認爲你鏈接葫蘆罐頭的步驟,而不是黃瓜 – stansult 2016-03-02 20:54:27

+0

我不認爲這是一個好主意,因爲它似乎引入了一個合成步驟只是爲了截圖,這是與被測試的業務場景無關。 更好地使用黃瓜掛鉤,以便截圖可以決定在每個步驟執行後進行。 – 2017-03-24 08:44:15

+0

@BigKahuna它取決於你是否僅僅爲了調試目的而使用這個步驟 - 以及當你正在通過步驟定義時,是否也使它成爲一個函數。 – 2017-06-06 09:09:20