我只是学习如何使用黄瓜。你能告诉我如何完成这段代码吗?
您可以使用以下代码片段为未定义的步骤实现步骤定义:
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
屏幕截图通常是在发生意外情况时拍摄的。当测试用例失败时,您可能还希望捕获屏幕截图以报告。在这种特殊情况下,您应该在@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();
}
您可以使用预设步骤(预定义)来截取屏幕截图。
Then take picture
不需要任何步骤定义。Cucumber 还带有许多其他预定义的步骤。查看其他固定步骤
如果您仍然需要编写步骤定义。
Then /^I take a screenshot$/ do
page.save_screenshot('image_name.png')
end
我提供了在场景失败时拍摄快照的代码,希望您可以根据自己的用途进行修改,如果您不能这样做,请在此处评论。此代码在 Ubuntu 系统中使用 ruby
#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
在 Java 中,您可以像这样实现此步骤,
@Then("^I take a screenshot$")
public void i_take_a_screenshot()
{
// Your code goes here
}
如果您使用 watir-webdriver 进行测试,您可以在浏览器对象上调用 screenshot 方法并保存它。http://watirwebdriver.com/screenshots/
如果您正在做 Windows 控件,您可以使用 win32/screenshot gem 来实现这一点。https://github.com/jarmo/win32screenshot
上一个答案的改进版本。这有错误处理,在故障点写出 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();
}
}
}