diff --git a/lib/plugin/stepByStepReport.js b/lib/plugin/stepByStepReport.js
index 1cd99d1a2..21b96410a 100644
--- a/lib/plugin/stepByStepReport.js
+++ b/lib/plugin/stepByStepReport.js
@@ -88,6 +88,10 @@ module.exports = function (config) {
   const pad = '0000'
   const reportDir = config.output ? path.resolve(global.codecept_dir, config.output) : defaultConfig.output
 
+  event.dispatcher.on(event.suite.before, (suite) => {
+    stepNum = -1
+  })
+
   event.dispatcher.on(event.test.before, (test) => {
     const sha256hash = crypto
       .createHash('sha256')
@@ -106,7 +110,9 @@ module.exports = function (config) {
     recorder.add('screenshot of failed test', async () => persistStep(step), true)
   })
 
-  event.dispatcher.on(event.step.after, persistStep)
+  event.dispatcher.on(event.step.after, (step) => {
+    recorder.add('screenshot of step of test', async () => persistStep(step), true)
+  })
 
   event.dispatcher.on(event.test.passed, (test) => {
     if (!config.deleteSuccessful) return persist(test)
@@ -147,11 +153,13 @@ module.exports = function (config) {
   })
 
   async function persistStep(step) {
+    if (stepNum === -1) return // Ignore steps from BeforeSuite function
     if (isStepIgnored(step)) return
     if (savedStep === step) return // already saved
     // Ignore steps from BeforeSuite function
     if (scenarioFailed && config.disableScreenshotOnFail) return
     if (step.metaStep && step.metaStep.name === 'BeforeSuite') return
+    if (!step.test) return // Ignore steps from AfterSuite
 
     const fileName = `${pad.substring(0, pad.length - stepNum.toString().length) + stepNum.toString()}.png`
     if (step.status === 'failed') {