code: @Lorsque("Si '(.*)' vérifie '(.*)', je fais jusqu'à '(.*)' respecte '(.*)' avec '(.*)' essais maxi:")
      @Then("If '(.*)' matches '(.*)', I do until '(.*)' respects '(.*)' with '(.*)' max tries:")
      public void doUntil(String actual, String expected, String key, String breakCondition, int tries, List<GherkinConditionedLoopedStep> conditions) {
          try {
              if (new GherkinStepCondition("doUntilKey", expected, actual).checkCondition()) {
                  int i = 0;
                  do {
                      i++;
                      runAllStepsInLoop(conditions);
                  } while (!Pattern.compile(breakCondition).matcher(Context.getValue(key) == null ? "" : Context.getValue(key)).find() && i <= tries);
              }
          } catch (final TechnicalException e) {
              throw new AssertError(Messages.getMessage(TechnicalException.TECHNICAL_SUBSTEP_ERROR_MESSAGE) + e.getMessage());
          }
      }
docs: Does steps execution until a given condition is unverified.
  
  @param actual
  actual value for global condition.
  @param expected
  expected value for global condition.
  @param key
  key of 'expected' values ('actual' values)
  @param breakCondition
  'expected' values
  @param tries
  number of max tries (no infinity loop).
  @param conditions
  list of steps run in a loop.