Can`t check.However,try:
{foreach from=$allSteps key='id' item='step' name="loop" }
{if $smarty.foreach.loop.first }
{assign var="current" value=$step.page }
<table>
<thead>
<tr> <td>{$step.page}</td> </tr>
</thead>
<tr> <td>{$step.text}</td> </tr>
{else}
{if $current == $step.page }
<tr>
<td>{$step.text}</td>
</tr>
{else}
{assign var="current" value=$step.page }
</table> <!-- Close prev. table -->
<table> <!-- Start next table -->
<thead>
<tr> <td>{$step.page}</td> </tr>
</thead>
<tr> <td>{$step.text}</td> </tr>
{/if}
{/if}
{/foreach}
</table> <!-- close last table -->