我剛學會如何使用黃瓜。 你能告訴我如何完成這段代碼嗎?以黃瓜爲屏幕截圖
可以實現對不確定的步驟一步定義這些片段:
Then /^I take a screenshot$/ do
pending # express the regexp above with the code you wish you had
end
我剛學會如何使用黃瓜。 你能告訴我如何完成這段代碼嗎?以黃瓜爲屏幕截圖
可以實現對不確定的步驟一步定義這些片段:
Then /^I take a screenshot$/ do
pending # express the regexp above with the code you wish you had
end
在Java中,你可以實現這一步,像這樣,
@Then("^I take a screenshot$")
public void i_take_a_screenshot()
{
// Your code goes here
}
我不認爲這是一個好主意,因爲它似乎引入了一個合成步驟,僅用於與正在測試的業務場景無關的截圖。最好使用Cucumber鉤子,這樣可以決定在執行每個步驟後截圖。 – 2017-03-24 08:44:59
如果您正在使用的Watir-webdriver的爲您的測試你可以調用瀏覽器對象的截圖方法並保存。 http://watirwebdriver.com/screenshots/
如果你正在做windows控件,你可以使用win32/screenshot gem來實現這一點。 https://github.com/jarmo/win32screenshot
在出現意外情況時會採取一般屏幕截圖。您可能還需要捕獲屏幕截圖來報告測試用例何時失敗。在這種情況下,您應該在每個場景都會執行的@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();
}
我提供的情況時失敗,這將拍攝快照的代碼,我希望你可以根據你的用途修改,如果你不能在這裏這樣做評論。此代碼與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
以前的答案的改進版本。這有錯誤處理,在失敗點寫出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();
}
}
}
您可以使用罐裝步驟(預先定義的)取屏幕截圖。
Then take picture
沒有需要任何步驟定義。黃瓜還帶有許多其他預定義的步驟。參見其他canned steps
如果仍然需要編寫步驟定義。
Then /^I take a screenshot$/ do
page.save_screenshot('image_name.png')
end
我認爲你鏈接葫蘆罐頭的步驟,而不是黃瓜 – stansult 2016-03-02 20:54:27
我不認爲這是一個好主意,因爲它似乎引入了一個合成步驟只是爲了截圖,這是與被測試的業務場景無關。 更好地使用黃瓜掛鉤,以便截圖可以決定在每個步驟執行後進行。 – 2017-03-24 08:44:15
@BigKahuna它取決於你是否僅僅爲了調試目的而使用這個步驟 - 以及當你正在通過步驟定義時,是否也使它成爲一個函數。 – 2017-06-06 09:09:20
給你使用哪種語言的詳細信息...? – Aravin 2015-11-25 07:36:58