/** * 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(); }