Сделай скриншот с огурцом
Я просто учусь пользоваться огурцом. Можете ли вы сказать мне, как завершить этот код?
Вы можете реализовать определения шагов для неопределенных шагов с помощью этих фрагментов:
Then /^I take a screenshot$/ do
pending # express the regexp above with the code you wish you had
end
6 ответов
Скриншоты в основном делаются, когда происходит что-то неожиданное. Вы также можете сделать снимок экрана, чтобы сообщить о неудачном тестировании. В этом конкретном случае у вас должна быть логика захвата скриншота в методе @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
Нет необходимости в каком-либо определении шага. Огурец также поставляется со многими другими заранее определенными шагами. Посмотреть другие консервированные шаги
Если вам все еще нужно написать определение шага.
Then /^I take a screenshot$/ do page.save_screenshot('image_name.png') end
Я предоставляю код, который будет делать моментальный снимок в случае сбоя сценария, надеюсь, вы сможете изменить его в соответствии с вашими потребностями. Если вы не можете этого сделать, прокомментируйте здесь. Этот код в рубине с системой 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();
}
}
}
Если вы используете для тестирования watir-webdriver, вы можете вызвать метод снимка экрана для объекта браузера и сохранить его. http://watirwebdriver.com/screenshots/
Если вы используете элементы управления Windows, вы можете использовать гем win32/screenshot для достижения этой цели. https://github.com/jarmo/win32screenshot
В Java вы можете реализовать этот шаг так,
@Then("^I take a screenshot$")
public void i_take_a_screenshot()
{
// Your code goes here
}