code: def _add_assert(self, **kwargs):
          
          # convert screenshot to relative path from <None|True|False|PIL.Image>
          screenshot = kwargs.get('screenshot')
          is_success = kwargs.get('success')
          screenshot = (not is_success) if screenshot is None else screenshot
          kwargs['screenshot'] = self._take_screenshot(screenshot=screenshot, name_prefix='assert')
          action = kwargs.pop('action', 'assert')
          self.add_step(action, **kwargs)
          if not is_success:
              message = kwargs.get('message')
              frame, filename, line_number, function_name, lines, index = inspect.stack()[2]
              print('Assert [%s: %d] WARN: %s' % (filename, line_number, message))
              if not kwargs.get('safe', False):
                  raise AssertionError(message)
docs: if screenshot is None, only failed case will take screenshot