/**
  * Execute command list.
  *
  * @param context Selenese Runner context.
  * @param cresultList command result list for keeping all command results.
  * @return result of command list execution.
  */
 public Result execute(Context context, CommandResultList cresultList) {
   CommandListIterator parentIterator = context.getCommandListIterator();
   CommandListIterator commandListIterator = iterator(parentIterator);
   context.pushCommandListIterator(commandListIterator);
   CommandSequence sequence = commandListIterator.getCommandSequence();
   boolean isContinued = true;
   try {
     while (isContinued && commandListIterator.hasNext()) {
       ICommand command = commandListIterator.next();
       sequence.increment(command);
       List<Screenshot> ss = command.getScreenshots();
       int prevSSIndex = (ss == null) ? 0 : ss.size();
       String[] curArgs = context.getVarsMap().replaceVarsForArray(command.getArguments());
       evalCurArgs(context, curArgs);
       Result result = doCommand(context, command, curArgs);
       if (result.isAborted()) isContinued = false;
       else context.waitSpeed();
       ss = command.getScreenshots();
       List<Screenshot> newSS;
       if (ss == null || prevSSIndex == ss.size()) newSS = null;
       else newSS = new ArrayList<>(ss.subList(prevSSIndex, ss.size()));
       CommandResult cresult =
           new CommandResult(
               sequence.toString(),
               command,
               newSS,
               result,
               cresultList.getEndTime(),
               System.currentTimeMillis());
       cresultList.add(cresult);
     }
   } finally {
     context.popCommandListIterator();
   }
   return cresultList.getResult();
 }